2016-06-15 2 views
0

버그가 발생했거나 Docker Machine 및 Compose와 함께 Windows에서 변수 대체에 대해 제대로 문서화되지 않은 것이 있는지 궁금합니다 (고정 된 버전의 docker가 1.11.1).변수 고정 대체가 Windows 10에서 작동하지 않음

나는이처럼 보이는 YML 파일의 "최대 고정 표시기-구성"명령을 실행하는 경우 :

volumes: 
- ${FOOBAR}/build/:/usr/share/nginx/html/ 

을 그리고 고정 표시기의 작성을 존재하지 않는이 변수가 올바르게에 대해 불평 할 것이다 :

The foobar variable is not set. Defaulting to a blank string. 

그러나, 나는 기존의 환경 변수로 변경하는 경우 : 프로 후

volumes: 
- ${PROJECT_DIR}/build/:/usr/share/nginx/html/ 

그것은하지 않습니다 페를 리 (당신이 도달 할 수없는 메시지가 호스트되어 줄 것이다 nginx를 컨테이너에 액세스하려고) 컨테이너를 시작하고 다음 오류가 표시

ERROR: for nginx rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory" 

을 나는 그것이 출력 올바른 경로를합니다 도커 빠른 터미널에 echo 명령을 실행하는 경우 환경 변수에서 설정 한 값입니다. $ {PROJECT_DIR}을 환경 변수 값으로 바꾸면 컨테이너가 올바르게 실행됩니다.

공식 nginx 이미지 대신 공식 PHP 이미지에 환경 변수를 사용하려고하면 같은 유형의 오류 메시지가 나타납니다. 두 경우 모두 $ {PROJECT_DIR} 텍스트를 환경 변수의 내용으로 대체하면 docker compose 파일이 작동합니다.

버그입니까? 아니면 누락 되었습니까?

volumes: 
- ${PROJECT_DIR}:/usr/share/nginx/html/ 

의 nginx : 일부 난 다음이 (로컬 파일의 전체 경로를 포함)를 사용하는 경우 오류 메시지없이 올바르게 시작하는 용기를 얻을 관리했습니다에 대한 일 처리 후


컨테이너는 이제 더 이상 파일을 찾을 수는 없지만 작동 중입니다. 변수를 포함하는 경로로 변수를 바꾸면 파일을 다시 찾을 수 있습니다.


위의 동작이 일관되지 않습니다. 대체 할 두 번째 환경 변수를 추가하면 oci 런타임 오류가 발생합니다. 내가 두 번째 변수를 제거하고 첫 번째 변수를 제거했을 때 다시 작업하기 시작했을 때이 변수를 유지합니다. 그 후 갑자기 파일을 찾지 않고 $ {PROJECT_DIR}/build /을 수락했다.

nginx 컨테이너에 대한 bash 세션을 시작하면 볼륨의 마운트 지점에 파일이 없음을 알 수 있습니다.

나는 도커가하고있는 일과 내게 기대되는 것을 실제로 잃어 버렸습니다. 특히 compose 파일의 변수가 무엇을 확장하는지 알지 못합니다.

+0

안녕하세요 .. 'FOOBAR =/yourpath docker-compose'및이 'export FOOBAR =/yourpath && docker-compose up' 두 가지를 모두 시도해 보셨습니까? –

+0

당신은'PROJECT_DIR'의 실제 값을 보여줄 수 있습니까? – vitr

+0

및 도커 버전 – vitr

답변

1

결론적으로 Docker Machine이있는 Windows에서는 변수 대체가 너무 이상합니다. 그러나 변수 대체에 대한 대안이 있습니다.

다음 않는 고정 표시기 환경이 필요한 경우 :

  1. 호스트는 기본적으로 또는 가상을 통해 부두 노동자를 사용하는 경우
  2. 상관하지 않습니다 같은 OS를 실행하지 않는 다른 컴퓨터에 배포 할 수 있습니다를 상자 (경로 변경이 필요할 수 있음)

그러면 가장 좋은 방법은 확장을 사용하는 것입니다.

먼저 필요한 이미지가 포함 된 docker-compose.yml 파일을 만듭니다. 예를 들어 MySQL을 가진 PHP 이미지의 경우 :

php: 
    image: 5.5-apache 
    links: 
    - php_db:mysql 
    - maildev:maildev 
    ports: 
    - 8080:80 
php_db: 
    image: mariadb 
    ports: 
    - 3306:3306 
    environment: 
    MYSQL_ROOT_PASSWORD: examplepass 

이 고정 표시기-작성 파일에 정의 된 모든 볼륨이 수신되지 않습니다.

php: 
    volumes: 
    - /workspaces/Eclipse/project/:/var/www/html/ 

당신이 하나의 디렉토리 고정 표시기-작성의 두 파일이있을 때 수행 흥미로운 : 그건 우리가라는 파일 고정 표시기 - compose.override.yml에서 정의하는거야 무언가이다. docker-compose.yml에있는 add/overwriting 설정 중 하나를 docker-compose.override.yml에있는 설정으로 결합합니다.

그런 다음 docker-compose up 명령을 실행하면 작업중인 시스템에 대해 구성된 도커 실행이 발생합니다. 당신이 당신의 고정 표시기-작성 명령에 몇 가지를 변경할 경우 사용자 정의 파일 이름이 비슷한 동작을 얻을 수 있습니다

는 :

docker-compose -f docker-compose.yml -f docker-compose.conf.yml up 

세부는 고정 표시기-작성 여러 작성 파일을 받아 들일 수이며 그들을 결합한다 하나에. 이것은 왼쪽에서 오른쪽으로 발생합니다.

두 가지 방법 모두 필요한 컨테이너를 구성하는 기본 작성 파일을 만들 수 있습니다. 그러면 도커를 실행중인 특정 컴퓨터에 필요한 설정을 재정의하거나 추가 할 수 있습니다.

페이지 Overview of docker-compose CLI에는 이러한 명령의 작동 방식에 대한 자세한 정보가 있습니다.

관련 문제