2017-02-14 8 views
0

CI/CD 빌드를 실행하는 데 사용하는 이미지가 있습니다 (GitLab CE 사용). 컨테이너가 파괴되기 때문에 내가 호스트 시스템에 정의 된 액세스 기계에 고정 표시기 기계 싶습니다, 그러나컨테이너 내에서 호스트 도커 - 머신에 액세스

eval "$(docker-machine env manager)" 
sudo docker stack deploy --compose-file docker-stack.yml web 

및 I : I는 컨테이너 내에서이 같은 내 애플 리케이션하고 뭔가를 배포하고 싶습니다 이미지에 액세스 세부 정보를 포함하고 싶지는 않습니다.

나는 호스트에 고정 표시기 기계를 만들고이를 컨테이너가 사용할 수 있도록 MACHINE_STORAGE_PATH를 탑재 docker-machine

  • 를 통해 원격 호스트 액세스 몇 가지

    을 시도했습니다

  • 콘테이너 내에서 수동으로 원격 도커 - 머신에 연결하고 을 마운트 된 볼륨과 동일하게 설정하십시오.
  • 도커 소켓 장착

두 경우 모두 컴퓨터 저장 장치가 유지되는 것을 볼 수 있지만 새 컨테이너를 만들고 실행할 때마다 docker-machine ls 컴퓨터가 나열되지 않습니다. docker-machine ssh manager-1 -N -L 2376:localhost:2376

  • export DOCKER_HOST=:2376
  • 하는 docker-에 의해 사용되는 동일한 인증서 표시를 사용하는 고정 표시기에게 호스트 고정 표시기 포트에 DOCKER_HOST

    • 전달을 통해 원격 시스템 고정 표시기 포트를 원격 호스트 액세스

      기기 : export DOCKER_TLS_VERIFY=1export DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/manager-‌​1

    • 시험 docker info
    • ,

    이 나에게 error during connect: Get https://localhost:2376/v1.26/info: x509: certificate signed by unknown authority

    나는 용기 내에서 원격 배포를 수행 할 수있는 방법에 대한 아이디어를 제공?

    감사

    편집 여기

    시도하고 더 나은 시나리오를 전달하기위한 도면. 고정 표시기가 명령

    docker run -v /var/run/docker.sock:/var/run/docker.sock <gitlab-image> 
    

    지금 당신이 실행할 수 있습니다 경우

    architectur

  • +0

    나는 권고 된 것처럼'docker.sock'을 마운트하지 않을 것입니다. 정보는 https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/에있는이 기사를 참조하십시오. 큰 보안 구멍을 열었습니다. –

    +0

    소켓에서 실행되는 유일한 컨테이너가 빌드 컨테이너 인 경우 위험이 많이 있다고 생각하십니까? – jaredcnance

    +0

    일반적으로 컨테이너 내에서 컨테이너를 실행하고 싶지는 않습니다. 볼륨에 대한 액세스가 필요하다면 대신'--link' 또는'docker> = 1.12'를 사용하여 네트워크 오버레이를 생성해야합니다. 컨테이너를 사용하여 다른 컨테이너를 시작하는 것은 아무 문제가 없으며 호스트 시스템에서 시작하고 컨테이너 내부에서 시작하지 마십시오. 컨테이너로 컨테이너를 만드는 것은 시간이 지남에 따라 관리하기 어려운 패턴 일뿐입니다. –

    답변

    -1

    당신은 CI 컨테이너를 시작할 때 단순히 도커 소켓을 장착 할 수있는 부두 노동자 호스트에 CI 컨테이너에서 통신하려는 CI 컨테이너 내의 호스트.

    +0

    예 - 이미 그렇게하고 있습니다. 나는'docker build'와'docker login '과 같은 일을 할 수 있지만 실제로 원격 기계에 배포하고 싶을 때,'docker-machine ls'는 기계를 보여주지 않습니다. 그러나 호스트에서'docker-machine ls '를 실행하면 여러 대의 기계가 나타납니다. 도커 컴퓨터에 장착해야하는 소켓이 있습니까? – jaredcnance

    +0

    이 사실을 알려서는 안됩니다. 'docker.sock'을 마운트하는 것은 보안 문제입니다. https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/이 문제에 관해 많은 기사가 있습니다. 생산시 고정 다리를 사용하는 경우에는 권장하지 않습니다. –

    0

    이것을 위해 도커 - 머신을 사용하지 마십시오.

    Docker-machine은 $ HOME /에 파일을 저장합니다.docker/machine이므로이 폴더의 새로운 복사본으로 다시 시작하면 이전에 정의 된 모든 시스템이 제거됩니다. 이 폴더를 볼륨으로 저장할 수는 있지만 훨씬 쉬운 방법이 있습니다.

    해결책은 도커 소켓을 마운트하는 것이며, 루트 또는 도커 소켓과 동일한 gid를 가진 사용자 (컨테이너 내부 및 외부의 그룹 이름 자체가 일치하지 않을 수 있으므로 gid가 중요 함)입니다. docker ... 명령을 정상적으로 실행하십시오. 로컬 도커 소켓에 대해 명령을 실행하고 있으므로 docker-machine 평가판을 건너 뛸 수 있습니다.

    원격으로 명령을 실행해야하는 경우 docker-machine 대신 수동으로 DOCKER_HOSTDOCKER_TLS_VERIFY 개의 변수를 쉽게 정의 할 수 있습니다.

    +0

    그래서 이미 건물 이미지와 같은 일을하기 위해 소켓을 마운트합니다. 만약 호스트에서 원격 컴퓨터로 터널을 설정했다면 :'docker-machine ssh manager-1 -N -L 2376 : localhost : 2376' 그리고'DOCKER_HOST = : 2376'을 설정하고'docker info'를 실행하십시오. get : http : // localhost : 2376/v1.26/info : 잘못된 HTTP 응답 "\ x15 \ x03 \ x01 \ x00 \ x02 \ x02"을 가져옵니다. – jaredcnance

    +0

    그런 다음'export DOCKER_TLS_VERIFY = 1' 및'export DOCKER_CERT_PATH =/Users/me/.docker/machine/machines/manager-1'을 시도한 후'docker info'는'connect while : https : // localhost : 2376/v1.26/info : x509 : 알려지지 않은 기관이 서명 한 인증서' – jaredcnance

    +0

    docker-machine을 계속 사용하고있는 것처럼 보입니다. 또한 호스트에서 사용중인 명령과 파일/디렉토리와 컨테이너 내부의 명령이 명확하지 않습니다. 이들은 정의 상으로는 동일하지 않습니다. 원격 도커 소켓 사용에 대한 자세한 내용은 다음 링크를 참조하십시오. https://docs.docker.com/engine/security/https/ – BMitch

    관련 문제