2017-12-18 16 views
0

우리는 이전에 Docker in Docker (DIND) 모드에서 Jenkins를 실행했습니다. 즉, Jenkins 도커 컨테이너에서 docker 데몬을 실행했습니다. 그러나 많은 문제 (일부는 위의 링크에 설명되어 있음)로 인해이 접근법에서 벗어나 컨테이너를 시작할 때 컨테이너를 시작할 때 단순히 볼륨으로 마운트하여 호스트 데몬을 사용하도록했습니다.docker의 상대 폴더를 작성 하시겠습니까? 컨테이너를 통해 docker 데몬을 사용할 때 작성 하시겠습니까?

-v /var/run/docker.sock:/var/run/docker.sock 

그러나 Docker Compose이있는 상대 경로를 장착 할 때 컨테이너 내부에서 시작되어 DIND 모드에서 정상적으로 작동 할 때 문제가 발생합니다. 이 고정 표시기-작성 파일을 고려

myimage: 
    build: . 
    environment: 
    LANG: C.UTF-8  
    working_dir: /code 
    volumes: 
    - ../../../:/code 
    - ~/.m2/repository:/root/.m2/repository 
    - ~/.gradle:/root/.gradle 

는 이전이는 컨테이너에서, 예제 ../../../ 폴더, 모든 폴더를 마운트하지만 지금은 호스트에서 이들에 대한 마운트 시도를 보인다. 호스트에서 디렉토리 구조를 확인하면 docker-compose이 컨테이너에서 디렉토리 구조를 복제 한 다음이 폴더를 비워 두려고 시도하는 것처럼 보입니다.

내 질문에 어떻게 호스트에서 도커 데몬을 사용할 때 Docker Compose에서 상대 경로를 마운트 할 수 있습니까?

+0

이은을 downvoted 이유, 내가 향상시킬 수 있도록 알려 싶어요 이해하지 마십시오

myimage: build: . environment: LANG: C.UTF-8 working_dir: /code volumes: - ./code:/code - ./m2-repo:/root/.m2/repository ... 
미래에 내 질문. – Johan

답변

0

호스트의 상대 경로가 Jenkins 컨테이너 내에서 동일하게 작동하는지 확인해야합니다.

docker-compose는 상대 경로가 docker 호스트가 필요로하는 절대 경로로 변환 할 수있는 최상의 방법입니다. docker 호스트에서 새 경로를 작성하기 위해 모든 경로가 평가되고 docker 클라이언트를 원격 또는 컨테이너 내부에서 실행하고 현재 디렉토리가 무엇인지 알지 못합니다.

As 또 다른 옵션으로, 명명 된 볼륨으로 전환하는 것을 고려하고 Jenkins 컨테이너의 동일한 명명 된 볼륨을 다른 컨테이너와 매핑 할 수 있습니다.

-1

Docker는 클라이언트 서버 아키텍처를 가지고 있기 때문에 호스트에있는 도커 소켓을 마운트 할 때 단순히 호스트 도커 deamonm과 통신하기 만하면됩니다. 따라서 모든 호스트 볼륨 경로는 호스트에서 경로로 해석됩니다.

해결하려면 젠킨스 컨테이너 디렉토리를 호스트에 바인드 한 다음 호스트 폴더를 마운트 포인트로 사용해야합니다.

-v ./code:<path-to-../../..> -v ./m2-repo:.../.m2/repository 

그런 다음 호스트 폴더를 사용하기 위해 작성 파일을 변경하여 따라서 단순히 젠킨스 컨테이너를 시작합니다

+0

고맙지 만,이 문제는 젠킨스 프로젝트마다 ''가 ​​다르다는 것입니다. 새로운 프로젝트가 추가 될 때마다 볼륨 마운트를 변경하지 않아도되고 싶습니다. (답을 득표 한 적은 없습니다). – Johan