it-source

도커 합성을 사용하여 컨테이너에 파일 복사

criticalcode 2023. 7. 30. 17:53
반응형

도커 합성을 사용하여 컨테이너에 파일 복사

나는 있습니다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 

Screenshot of directory listing with docker exec

하지만 내가 사용할 때docker-compose.yml "file"만.aw3somevideo 안쪽 에쪽안.aw3somevideo아무것도 없습니다.

도커-docker.yml:

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

Screenshot of empty directory listing

▁function다것▁maybe의 기능을 이해하지 못하는 것 같습니다.volumes그리고 만약 그렇다면, 제 기존 파일을 컨테이너에 복사하는 방법을 알려주세요.docker-compose.ymljava.

정해진

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

한다면/dir/on/host빈. 호스트에 생성되고 빈 콘텐츠가 컨테이너에 마운트됩니다./var/www/html당신이 이전에 가지고 있던 내용이 무엇이든./var/www/html볼륨을 마운트 해제할 때까지 컨테이너 내부에 액세스할 수 없습니다. 새 마운트는 이전 콘텐츠를 숨기고 있습니다.

서문:저는 이 질문이 꽤 오래되었고 OP가 해결책을 찾았을 수도 있다는 것을 알고 있지만, 정확한 답변이 보이지 않기 때문에 OP가 제기하는 질문과 관련 문제를 다루는 것이 적절하다고 생각했습니다.

먼저, 명명볼륨과 바인딩 마운트의 구별을 명확히 합니다.전자를 사용하면 컨테이너 외부에서 이미 컨테이너 위치에 있는 파일을 볼 수 있지만 후자는 볼 수 없습니다.기본적으로 바인딩 마운트는 xNIX에서 볼륨을 마운트할 때와 매우 유사하게 작동합니다. 즉, 디바이스가 마운트된 후 마운트 위치에 이미 있는 모든 파일이 마스킹됩니다. 오버레이라고 생각하면 됩니다.

음을 할 때, 지할때를 지정합니다../Frontend/ :/var/www/html/하는 것이기 에 바드마 지는중이검시색로므정을 할 때 합니다../Frontend호스트 측에서는 예상되는 모든 파일이 사라집니다.내가 당신의 최종 목표를 올바르게 이해했다면 당신은 파일을 가지고 싶어합니다./var/www/html/컨테이너 외부의 정확한 동일한 위치를 통해 컨테이너 내부에 접근할 수 있습니다.그렇다면 다음과 같이 사용자 지정 마운트 지점과 함께 명명된 볼륨을 사용할 수 있습니다.

volumes:
  Frontend:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/var/www/html'

php:
    build: php/
    volumes:
      - Frontend:/var/www/html/

이 기능을 사용하지 않을 경우에 따라driver_opts위에 나열된 볼륨은 여전히 존재하지만 호스트 측 위치는 도커 영역에 있습니다.으로 이은일반다같음습다니과로으와 같은 입니다./var/lib/docker/volumes또는 그와 유사합니다.는 정한위다수있다습니확인에서 수 .Mounts의한부의 한 docker inspectcommand


다음은 제 PiHole 연구소 호스트에 대한 유사한 설정입니다.

도커-docker.yml (계산됨)

volumes:
  etc-pihole:
  etc-dnsmasq.d:
  etc-unbound:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/home/dockeruser/ct5/etc-unbound'

services:
  pihole:
    container_name: asbuilt_ct5
    hostname: pb-asbuilt-5
    volumes:
         - './etc-pihole:/etc/pihole/'
         - './etc-dnsmasq.d:/etc/dnsmasq.d/'
         - 'etc-unbound:/etc/unbound/'

의 출력sudo docker inspect,Mount섹션 전용 (계산됨)

"Mounts": [
   {
      "Type": "bind",
      "Source": "/home/dockeruser/ct5/etc-dnsmasq.d",
      "Destination": "/etc/dnsmasq.d",
   },
   {
      "Type": "bind",
      "Source": "/home/dockeruser/ct5/etc-pihole",
      "Destination": "/etc/pihole",
   },
   {
      "Type": "volume",
      "Name": "ct5_etc-unbound",
      "Source": "/var/lib/docker/volumes/ct5_etc-unbound/_data",
      "Destination": "/etc/unbound",
      "Driver": "local",
   }
]

컨테이너 파일 목록:/etc/unbound

root@pb-asbuilt-5:/# ls /etc/unbound
unbound.conf  unbound.conf.d  unbound_control.key  unbound_control.pem  unbound_server.key  unbound_server.pem

호스트 측 파일 목록:/home/dockeruser/ct5/etc-unbound

[dockertest-srv1] > ls /home/dockeruser/ct5/etc-unbound
unbound.conf  unbound.conf.d  unbound_control.key  unbound_control.pem  unbound_server.key  unbound_server.pem

Docker Composite에는 배포 중에 호스트에서 컨테이너로 파일을 복사하는 기능이 없습니다.바인딩 마운트의 사용이 제한되며, 이로 인해 발생할 수 있는 몇 가지 문제가 발생할 수 있습니다(대상이 이미 컨테이너에 있는 경우 덮어쓰게 되며, 배포 후 소스를 제거하면 컨테이너가 정상적으로 실행되지만 다시 시작할 때 실패합니다).

Compose 프로젝트에서 거부하는 복사 파일 피쳐의 용지 추적:

https://github.com/docker/compose/issues/2105

https://github.com/docker/compose/issues/5523

도커 파일에서 복사를 추가로 변경합니다. 이것은 파일이 아닌 디렉터리를 복사하는 방법입니다.

언급URL : https://stackoverflow.com/questions/39176561/copying-files-to-a-container-with-docker-compose

반응형