Sao chép tệp vào vùng chứa bằng Docker Compose


96

Tôi có một Dockerfilenơi tôi sao chép một thư mục hiện có (có nội dung) vào vùng chứa hoạt động tốt:

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 

Ảnh chụp màn hình danh sách thư mục với trình điều hành docker

Nhưng khi tôi sử dụng một docker-compose.ymltập tin thì chỉ có thư mục aw3somevideovà bên trong aw3somevideokhông có gì cả.

docker-compost.yml :

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

Ảnh chụp màn hình danh sách thư mục trống

Có thể tôi không hiểu chức năng của volumesvà nếu đúng như vậy, vui lòng cho tôi biết cách sao chép các tệp hiện có của tôi vào vùng chứa thông qua một docker-compose.ymltệp.


5
Xóa volumes:phần của bạn khỏi tệp soạn nhạc do docker của bạn. Hình ảnh của bạn đã có dữ liệu. Phần volume: chỉ ghi đè dữ liệu. Đồng thời chuyển sang định dạng docker-soạn hiện tại (phiên bản 2).
Bernard

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

Tôi sẽ trả lời như một câu trả lời để bạn đóng vấn đề này.
Bernard

Câu trả lời:


82

Được

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

nếu /dir/on/hostkhông tồn tại, nó được tạo trên máy chủ lưu trữ và nội dung trống được gắn trong vùng chứa tại /var/www/html. Bất kỳ nội dung nào bạn có trước đó /var/www/htmlbên trong vùng chứa đều không thể truy cập được, cho đến khi bạn ngắt kết nối âm lượng; mount mới đang ẩn nội dung cũ.


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

1
@Tarator vâng, bên 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 cách sao chép khi khởi động vùng chứa, bạn có thể ghi đè lệnh khởi động bằng một thứ như thế này docker run -v /dir/on/host:/hostdir php sh -c "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 được tín hiệu chấm dứt (ví dụ: Ctrl-C).
Bernard

Hi, tôi cũng đang cố gắng để điều tương tự với Docker-soạn nhưng nhận được một lỗi, bạn có thể vui lòng có một cái nhìn vào nó ... stackoverflow.com/questions/45573831/...
utkarsh31

Này, Bernard, trong câu trả lời của bạn, bạn đề cập đến " liệu phía bên tay phải chỉ định một ổ đĩa được đặt tên như myvolume hay một đường dẫn trên máy chủ lưu trữ" . Ý bạn không phải là "bên trái" ở đó, vì đó là nơi người ta chỉ định một ổ đĩa hoặc đường dẫn máy chủ, sau đó được ánh xạ tới vị trí vùng chứa trên rhs? Tôi nhận ra rằng bạn đang nói về cách Docker có thể quản lý việc sao chép tệp giữa bên trái và bên phải và cách nó thay đổi.
charlie arehart

@charliearehart Bạn nói đúng. Tôi sẽ sửa lỗi đó ngay bây giờ.
Bernard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.