>source

Full Stack Javascript 프로젝트의 로컬 개발 환경에 Docker Compose를 사용하고 있습니다.

Docker Compose 파일의 일부는 다음과 같습니다

version: "3.5"
services:
  frontend:
    build:
      context: ./frontend/
      dockerfile: dev.Dockerfile
    env_file:
      - .env
    ports:
      - "${FRONTEND_PORT_NUMBER}:${FRONTEND_PORT_NUMBER}"
    container_name: frontend
    volumes:
      - ./frontend:/code
      - frontend_deps:/code/node_modules
      - ../my-shared-module:/code/node_modules/my-shared-module

my-shared-module 라는 커스텀 노드 모듈을 개발하려고합니다 , 그래서 내가 - ../my-shared-module:/code/node_modules/my-shared-module 를 추가 한 이유  Docker Compose 파일에. 노드 모듈은 개인 Git 저장소에 호스팅되며 package.json 에서 이와 같이 정의됩니다.

 "dependencies": {
    "my-shared-module": "http://[email protected]/.....git",

내 문제는

npm install 를 사용하여 docker 컨테이너에서 노드 모듈 업데이트를 실행할 때 , 그것은 my-shared-module 를 다운로드  내 개인 Git 저장소에서 /code/node_modules/my-shared-module 로 호스트 ../my-shared-module 의 파일을 덮어 씁니다. 동기화되었으므로

제 질문은 Docker에서 단방향 볼륨 동기화가 가능합니까?

  • 호스트 변경시 컨테이너 업데이트
  • 컨테이너가 변경되면 호스트를 업데이트하지 않습니까?
  • 답변 # 1

    불행히도 나는 이것이 Docker에서 가능하다고 생각하지 않습니다. 읽기 전용 마운트를 단방향으로 간주하지 않는 한 호스트 볼륨 마운트는 항상 양방향이지만 npm install 와 같은 것으로 파일 시스템을 수정할 수 없습니다. .

    여기에 가장 좋은 옵션은 매번 새 파일로 이미지를 다시 작성하거나 CMD 에 굽는 것입니다.  마운트 된 파일을 마운트 된 볼륨 외부의 새 폴더에 복사하는 단계. 이렇게하면 파일 변경 사항이 호스트 컴퓨터에 다시 유지되지 않습니다.

  • 답변 # 2

    이 작업을 수행하기 위해 스크립트를 작성할 수 있습니다. 호스트 node_modules를 컨테이너 내부의 다른 디렉토리에 마운트하고 진입 점에서 디렉토리를 복사하십시오.

    version: "3.5"
    services:
      frontend:
        build:
          context: ./frontend/
          dockerfile: dev.Dockerfile
        env_file:
          - .env
        ports:
          - "${FRONTEND_PORT_NUMBER}:${FRONTEND_PORT_NUMBER}"
        container_name: frontend
        volumes:
          - ./frontend:/code
          - frontend_deps:/code/node_modules
          - /code/node_modules/my-shared-module
          - ../my-shared-module:/host/node_modules/my-shared-module:ro
    
    

    다음과 같이 Dockerfile에 진입 점 스크립트를 추가하십시오.

    #!/bin/sh
    if [ -d /host/node_modules/my-shared-module ]; then
      cp -r /host/node_modules/my-shared-module/. /code/node_modules/my-shared-module/.
    fi
    exec "[email protected]"
    
    

관련 자료

  • 이전 linux - 작업이 일시 정지 된 동안 '작업'의 출력 스쿼시 출력
  • 다음 c++ - 배열에서 짝수를 삭제하고 요소를 이동