2016-11-12 33 views
15

thí nghiệm này sẽ cố gắng để xây dựng một container sử dụng tập tin Docker này:Dockerfile vs Docker-soạn VOLUME

FROM lambdalinux/baseimage-amzn:2016.09-000 
COPY ./bundle /opt/bundle/ 
VOLUME /bundle 

Sau đó bên trong container, tạo ra một /opt/bundle/file.txt và đặt một số văn bản trong đó. Nhưng tệp đó không hiển thị trong thư mục bó trên máy chủ như tôi mong đợi sau khi đọc Should I include my code with COPY/ADD or a volume đoạn cuối:

Có thể có trường hợp bạn muốn sử dụng cả hai. Bạn có thể có hình ảnh bao gồm mã bằng cách sử dụng COPY và sử dụng một tập trong tệp Soạn thư của bạn để bao gồm mã từ máy chủ trong khi phát triển. Khối lượng ghi đè nội dung thư mục của hình ảnh.

Không Dockerfile VOLUME làm tương tự như docker-compose.yml VOLUME? Nếu vậy, làm thế nào điều này có thể được thực hiện để thay đổi trong thư mục máy chủ được phản ánh bên trong thư mục container trong trường hợp này?

Tôi cũng đã tạo ra một tập tin trên máy chủ bundle/play.txt nhưng điều đó đã không xuất hiện bên trong container /opt/bundle/...

Trả lời

17

Một VOLUME instruction trong dockerfile tạo ra một mount point nhưng ban đầu chỉ bản đồ nó vào thư mục dữ liệu nội bộ Docker của.

Để ánh xạ ổ đĩa cho hệ thống tệp lưu trữ, bạn cần chỉ định đường dẫn trên máy chủ sẽ được ánh xạ tới ổ đĩa. Bạn có thể làm điều này trong tệp docker-compose bằng cách sử dụng volumes parameter. (Lưu ý: bạn có thể tạo khối lượng bằng cách sử dụng docker-compose mà không khai báo chúng trong Dockerfile.)

Lưu ý rằng khi ánh xạ thư mục từ máy chủ đến vùng chứa, nội dung thư mục trên máy chủ sẽ thay thế nội dung trong vùng chứa, không phải ngược lại.

+0

Tôi có thể bỏ qua tuyên bố khối lượng dockerfile một cách hữu ích không khi tôi chỉ sử dụng định nghĩa khối lượng compose.yml? – velop

+2

@velop Có, bạn có thể. Trong thực tế, nó có thể là thích hợp hơn trong một số trường hợp - xem [bài viết này] (https://boxboat.com/2017/01/23/volumes-and-dockerfiles-dont-mix/). – augurar

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