2015-01-27 7 views
3

젠킨스 컨테이너가 Docker에서 실행 중이며 통합 테스트 등을 수행 할 때이 Jenkins 컨테이너를 사용하여 다른 Docker 컨테이너를 사용하려고합니다.Docker 컨테이너에서 Docker 호스트를 실행하는 방법은 무엇입니까?

그래서 컨테이너에 Docker를 설치하려고했으나 그렇지 않습니다. 나를 위해 그렇게 잘 일하는 것. 내 Dockerfile는 다음과 같은 :

FROM jenkins 
MAINTAINER xxxx 

# Switch user to root so that we can install apps 
USER root 

RUN apt-get update 

# Install latest version of Docker 
RUN apt-get install -y apt-transport-https 
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 
RUN sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 
RUN apt-get update 
RUN apt-get install -y lxc-docker 

# Switch user back to Jenkins 
USER jenkins 

jenkins 이미지는 데비안 제시를 기반으로합니다. 내가 생성 된 이미지를 기반으로 컨테이너 내부의 bash 터미널을 시작하고, 예를 들어 수행 할 때

docker images 

나는 다음과 같은 오류 메시지가 얻을 :

FATA[0000] Get http:///var/run/docker.sock/v1.16/images/json: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS? 

나는 고정 표시기 서비스가 아니기 때문에이 될 수 있다고 의심을 시작되었습니다.

mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup 
:이 라인에 /etc/init.d/docker에서 오류를 추적 한

mount: permission denied 

:

service docker start 

이 나에게 다음과 같은 오류를 제공합니다 : 나는 서비스를 시작하려고 할 때 내 옆에 문제가 발생

내 질문은 다음과 같습니다.

  1. 실제로 컨테이너 내부에서 Docker 호스트를 시작하려면 어떻게해야합니까? 아니면 피해야 할 뭔가요?
  2. Mac 및 boot2docker를 실행하고 있다면해야 할 일이 있습니까?
  3. here과 같이 호스트 컴퓨터의 Docker에 연결해야할까요?

업데이트 : 사용자 루트 및 젠킨스로 컨테이너를 시도했습니다. sudo이 설치되어 있지 않습니다.

답변

4

1. 시작한 첫 번째 컨테이너 (다른 컨테이너를 시작한 컨테이너)는 --privileged=true 플래그로 실행해야합니다.

2.- 그렇지 않다고 생각합니다.

3. 권한있는 플래그를 사용하면 도커 소켓을 볼륨으로 마운트 할 필요가 없습니다.

모든 것을 보려면 예 : this project을 확인하십시오.

+0

젠킨스 컨테이너를 루트로 실행하고 Dockerfile의 끝에 CMD [ "wrapdocker"]를 포함시키지 않으면 작동합니다. 컨테이너를 시작한 후 수동으로 "wrapdocker"를 실행해야합니다. 이것은 아마도 Jenkins 이미지가 CMD [ "wrapdocker"]를 추가하면 작동하지 않는 EntryPoint (컨테이너가 시작되지 않음)를 설정하고있는 것일 수 있습니다. 그래서 비록 당신이 내 질문에 대답했지만 그것은 내가 원하는 방식으로 작동하지 않지만이 문제에 대한 또 다른 질문을 만드는 것이 최선이라고 가정합니다. – Johan

5

보다 간단한 대안은 도커 소켓을 마운트하고 형제 컨테이너를 만드는 것입니다. 이렇게하려면 이미지에 고정 표시기를 설치하고 같은 실행 호스트에있는 것처럼 지금 고정 표시기 명령을 실행할 수 있어야 컨테이너에서

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

합니다. 이 방법의 장점은 --privileged이 필요없고 호스트에서 캐시를 사용할 수 있다는 것입니다. 단점은 컨테이너에서 생성 된 컨테이너뿐만 아니라 실행중인 모든 컨테이너를 볼 수 있다는 것입니다.

+0

우분투에서 잘 작동하지만 debian : jessie에서 libsqlite3-0 패키지가 필요합니다 - 그렇지 않으면'ldd $ (도커)'는'libsqlite3.so.0 => 찾을 수 없음 '을 보여줍니다 –

+0

OSX에서 어떻게 작동합니까? fwd에 /var/run/docker.sock이 없습니까? – dgorissen

+0

@dgorissen Mac 용 Docker는 Docker를 실행하기 위해 작은 Linux VM을 시작합니다. 이 VM에는 실제로 /var/run/docker.sock이 있습니다. –

관련 문제