Docker Compose를 사용하여 컨테이너에 파일 복사


94

나는이 Dockerfile내가 잘 작동 컨테이너에 (컨텐츠) 기존 디렉토리를 복사 여기서

Dockerfile

FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/

RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html 
RUN chmod -R 755 /var/www/html 

docker exec를 사용한 디렉토리 목록 스크린 샷

그러나 docker-compose.yml파일을 사용할 때 디렉토리 만 aw3somevideo있고 내부 aw3somevideo에는 아무것도 없습니다.

docker-compose.yml :

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

빈 디렉토리 목록의 스크린 샷

의 기능을 이해하지 못할 수도 있습니다 volumes. 그렇다면 기존 파일을 파일을 통해 컨테이너에 복사하는 방법을 알려주세요 docker-compose.yml.


4
volumes:docker-compose 파일에서 섹션을 제거하십시오 . 이미지에 이미 데이터가 있습니다. 볼륨 : 섹션은 데이터를 덮어 씁니다. 또한 현재 docker-compose 형식 (버전 2)으로 이동합니다.
Bernard

@Alkaline thx 정말 문제였습니다. 그러나 볼륨이 전체 디렉토리를 복사하지 않은 이유는 무엇입니까?
TheDoctor

이 문제를 종료 할 수 있도록 답장을 보내 드리겠습니다.
Bernard

답변:


80

주어진

    volumes:
      - /dir/on/host:/var/www/html

/dir/on/host존재하지 않는 경우 호스트에 생성되고 빈 콘텐츠가의 컨테이너에 마운트됩니다 /var/www/html. /var/www/html볼륨을 마운트 해제 할 때까지 컨테이너 내부에 있던 이전 콘텐츠에 액세스 할 수 없습니다. 새 마운트는 이전 콘텐츠를 숨기고 있습니다.


최신 도커 버전의 경우 콘텐츠가 존재하지 않더라도 var/www/html/더 이상 복사 /dir/on/host되지 않을 수 있습니까? 컨테이너를 처음 사용할 때 docker-container 내에서 호스트로 데이터를 강제 복사하는 방법이 있습니까?
Tarator

1
@Tarator 예, 실제로 오른쪽은 더 이상 호스트에 복사되지 않습니다. 답변을 업데이트하겠습니다. 컨테이너 시작시 복사하는 방법은 다음과 같이 시작 명령을 재정의 할 수 있습니다 docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp". execPID1이 할당되도록 최종 명령을 호출하는 데 사용 하는 것을 잊지 마십시오 . 그러면 myapp이 종료 신호 (예 : Ctrl-C)를 수신하게됩니다.
Bernard

안녕하세요, 저는 또한 docker-compose로 똑같은 일을 시도하고 있지만 오류가 발생합니다. 살펴보실 수 있습니까? stackoverflow.com/questions/45573831/…
utkarsh31

이봐, Bernard, 당신의 대답에서 당신은 " 오른쪽이 myvolume 또는 호스트의 경로와 같은 명명 된 볼륨을 지정하는지 여부 "를 참조합니다 . 볼륨 또는 호스트 경로를 지정하고 rhs의 컨테이너 위치에 매핑되는 "왼손"을 의미하지 않았습니까? Docker가 왼쪽과 오른쪽 사이의 파일 복사를 관리하는 방법과 변경 방법에 대해 이야기하고 있다는 것을 알고 있습니다.
찰리 arehart

@charliearehart 당신이 맞아요. 이제 그 실수를 수정하겠습니다.
Bernard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.