2016-08-07 3 views
2

여기 내 문제 :는 고정 표시기 구성 - 액세스 데이터를 컨테이너 A에서 컨테이너 B에

내가 컨테이너 A (Node.js를) 및 컨테이너 B (의 nginx)가이. 컨테이너 A의 Dockerfile에서 서버를 build 폴더로 실행하는 데 필요한 여러 소스 파일을 빌드합니다. 정적 파일을 제공하기 위해 컨테이너 B에서이 폴더에 액세스하려고합니다.

간단한 워크 플로를 사용하면 소스가있는 저장소를 복제하고 docker-compose up --build을 실행하여 모든 작업을 실행할 수 있습니다. 이 시나리오에서 호스트는 파일을 빌드하는 데 필요한 소프트웨어가 없기 때문에 도커 컨테이너 내부에서 빌드를 수행해야합니다.

거의 작품은 다음을이었다 내 첫 번째 시도 :

내가 처음 건설
version: "2" 
services: 
    nginx: 
     volumes_from: 
      - node 

    node: 
     volumes: 
     - /code/build 

고정 표시기의 작성 &까지 모든 것을 구축이 잘 작동하는 듯, 컨테이너는 그 안에 빌드 파일 컨테이너 A에서 생성된다 컨테이너 B는 예상대로 액세스 할 수 있습니다.

그러나 소스가 업데이트 될 때 문제가 발생합니다. 이런 일이 발생하면 기존 컨테이너에 우선 순위가있는 것처럼 새 빌드 파일이 컨테이너 내부의 기존 파일을 대체하지 않습니다. 그래서 처음으로 컨테이너 A와 B 모두에 대해 오래된 파일이 있습니다.

docker-compose build을 실행할 때마다 볼륨을 처음부터 다시 만들도록했지만 아무 것도 찾지 못했습니다. 내가 찾은 유일한 것은 docker-compose stop && docker-compose rm을 사용하는 것이지만 매번 그렇게하기에는 약간의 해킹 일뿐 아니라 기존 컨테이너를 docker-compose up으로 새 컨테이너로 교체하는 것과 비교하면 상당히 긴 다운 타임이 발생합니다.

달성하려는 목표를 달성하기위한 적절한 해결책이 있습니까?

+0

시도해 보셨습니까? 장기적으로 최선의 방법은 가능한 경우 이들을 분리하려고 시도하는 것입니다. – ldg

+0

나는'build'를 시도한 다음'up'과'--build up'을 시도하고 그 결과는 같고, 오래된 컨테이너는 유지되고 새로운 빌드 파일에 의해 덮어 쓰여지지 않습니다. – Mijamo

답변

1

워크 플로를 다시 실행하고 여러 컨테이너에 마운트 된 명명 된 볼륨을 사용하고 해당 컨테이너 중 하나가 응용 프로그램 빌드 환경이있는 업데이터입니다. 그런 다음 시작시 업데이트 프로그램은 git에서 최신 버전을 가져 와서 CMD 또는 ENTRYPOINT의 일부로 공유 볼륨을 업데이트합니다. 변경에 그런

version: "2" 
volumes: 
    build: 
     driver: local 

services: 
    nginx: 
     volumes: 
     - build:/code/build 

    updater: 
     volumes: 
     - build:/code/build 

, 당신이 docker-compose run updater를 실행할 수의 nginx는 사용할 수있는 곳은 지금까지 다른 컨테이너를 중지하지 않고 볼륨의 최신 변경을 추진합니다

귀하의 작성 파일은 비슷한에 보일 것이다 . 종료 작업이기 때문에 docker-compose up조차도 업데이터를 다시 시작합니다.

+0

흥미로운 워크 플로우, 해당 구성에서 새 빌드 파일을 사용하여 노드 서버를 정상적으로 다시 시작하는 방법은 무엇입니까? – Mijamo

+0

nodejs 또는 nginx를 실행하고 있습니까? nginx를 사용하면 새로운 변경 사항을 호스팅하기 시작해야합니다. 노드를 사용하면 [해당 솔루션이 있습니다] (http://nodemon.io/). – BMitch

+0

예, nginx는 새로운 변경 사항을 자동으로 호스팅하기 시작합니다. 그리고 이미 nodemon을 사용하고 있지만 변경된 모든 파일에 대해 점진적으로 다시 시작합니다. 그러나 문제를 해결하는 데 필요한 노드가 많습니다. – Mijamo

관련 문제