2016-08-27 21 views
18

Tôi có một Dockerfile nơi tôi sao chép một thư mục hiện có (với nội dung) để container mà hoạt động tốt:file Sao chép vào một container với Docker Soạn

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

Nhưng khi tôi sử dụng tệp docker-compose.yml, chỉ có thư mục aw3somevideo và bên trong aw3somevideo không có gì.

Docker-compose.yml:

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

Screenshot of empty directory listing

Có lẽ tôi không hiểu chức năng của volumes và nếu đó là trường hợp xin vui lòng cho tôi biết làm thế nào để sao chép các tập tin hiện hành với container thông qua tệp docker-compose.yml.

+1

Whomever left a -1, bạn nên thêm nhận xét vì lý do. Nó chỉ là những nghi thức SO cơ bản. – Alkaline

+2

Xóa phần 'volume:' khỏi tập tin docker-compose của bạn. Hình ảnh của bạn đã có dữ liệu. Khối lượng: phần chỉ ghi đè dữ liệu. Đồng thời chuyển sang định dạng trình soạn thảo docker hiện tại (phiên bản 2). – Alkaline

+0

@Alkaline thx thực sự là vấn đề. Nhưng tại sao không tập sao chép toàn bộ thư mục? – TheDoctor

Trả lời

15

Cập nhật tháng 4 năm 2017

Hành vi đã thay đổi kể từ khi tôi viết câu trả lời gốc. Nó bây giờ là phù hợp cho dù bên tay phải chỉ định một khối lượng được đặt tên như myvolume hoặc một con đường trên máy chủ như /var/lib/myapp. Ví dụ

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

nếu /dir/on/host không tồn tại, nó được tạo ra trên máy chủ và các nội dung có sản phẩm nào được gắn trong container tại /var/www/html. Bất cứ điều gì trong số /var/www/html trước đây là không thể truy cập.

---- câu trả lời cũ -----------

Phần volumes: trong Docker-soạn của bạn ghi đè lên bất cứ điều gì là trong thư mục /var/www/html.

Có hai nguồn điện tình huống:

  1. Khối lượng tồn tại

    Trong trường hợp đó, nội dung của khối lượng làm lu mờ bất cứ thứ gì trong thư mục dst.

    Ví dụ:

    volumes: 
        - /dir/on/host:/var/www/html 
    
  2. Khối lượng không tồn tại

    Nếu myvolume không tồn tại (một khối lượng đặt tên ví dụ), nội dung của thư mục/var/www/html sẽ được sao chép khối lượng lần đầu tiên xung quanh

    volumes: 
        - myvolume:/var/www/html 
    

Trong trường hợp 2, nếu bạn cố gắng để gắn kết cùng một khối lượng một lần nữa trên một số container, nó sẽ theo trường hợp 1.

volumes: 
     - myvolume:/var/www/html 

Trong trường hợp đó (giả sử myvolume đã được tạo), nội dung của/var/ww/html sẽ được ghi đè (shadowed) bởi bất cứ điều gì là trong myvolume.

Tài liệu chính thức đi vào chi tiết hơn https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

+0

Có thể, với phiên bản docker gần đây nội dung của 'var/www/html /' không được sao chép nữa vào '/ dir/on/host' ngay cả khi nó không tồn tại? Có cách nào để sao chép dữ liệu từ bên trong vùng chứa-dock vào máy chủ khi khởi động vùng chứa lần đầu tiên không? – Tarator

+0

@Tarator có thực sự, phía bên tay phải không được sao chép vào máy chủ nữa. Tôi sẽ cập nhật câu trả lời. Đối với một cách để sao chép vào container bắt đầu, bạn có thể ghi đè lên lệnh khởi động với một cái gì đó như thế này 'docker chạy -v/dir/on/host:/hostdir php shc" cp-rp/var/www/html/*/hostdir && exec myapp "'. Đừng quên sử dụng 'exec' để gọi lệnh cuối cùng để nó được gán PID1. Điều đó sẽ đảm bảo rằng myapp nhận tín hiệu chấm dứt (ví dụ Ctrl-C). – Alkaline

+0

Xin chào, tôi cũng đang cố gắng làm điều tương tự với tính năng tạo docker nhưng gặp lỗi, Bạn có thể xem xét nó không ... https: //stackoverflow.com/questions/45573831/docker-compose-not- khả năng-to-copy-haproxy-cfg .... Cảm ơn – utkarsh31

Các vấn đề liên quan