2014-04-17 19 views
7

tôi đang cố gắng để tạo ra một container Docker rằng có một khối lượng bên ngoài mà nên chứa nhiều thư mục, vì vậy phiên bản đơn giản của tôi về Dockerfile trông như thế này:Volumes Docker - file Tự động thêm

FROM ubuntu:12.04 

# Create a volume for externally stored data that will persist across containers. 
VOLUME ["/uploads"] 

# Add the subfolders we need if they dont already exist 
# however this never works. 
RUN mkdir /uploads/folder1 
RUN mkdir /uploads/folder2 

Bất cứ khi nào tôi khởi động vùng chứa có

sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

Thư mục/tải lên không chứa thư mục 1 hoặc thư mục2. Tuy nhiên, nếu tôi thay thế các dòng cập nhật VOLUME với một RUN mkdir /uploads nó làm việc với lệnh này

sudo docker run -i -t [IMAGE ID] /bin/bash 

nhưng không phải với lệnh này (thư mục đang thiếu một lần nữa):

sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

Làm thế nào tôi có thể thiết lập dockerfile để các tệp/thư mục sẽ tự động được thêm vào thư mục được lưu trữ trên máy chủ khi chạy vùng chứa?

+0

Bài viết này có thể trợ giúp về điều này: https://jpetazzo.github.io/2015/01/19/dockerfile-and-data-in-volumes/ –

Trả lời

9

Làm cách nào để thiết lập dockerfile để tệp/thư mục sẽ tự động được thêm vào thư mục được lưu trữ trên máy chủ khi chạy vùng chứa?

Bạn không. Dockerfile được sử dụng để tạo ra một hình ảnh, để thiết lập nội dung của hình ảnh. Bạn có thể thiết lập nội dung của bạn gắn thư mục trực tiếp trong vỏ của bạn:

# create folders: 
mkdir /uploads123 
mkdir /uploads123/folder1 
mkdir /uploads123/folder2 

# run container 
docker run -i -t -v /uploads123:/uploads [IMAGE ID] /bin/bash 

# for this trivial case, you can use directly ubuntu image, 
# it works, no need for Dockerfile 

Ngoài ra, bạn có thể thiết lập một số kịch bản cài đặt để chạy trong bao bì trước khi bắt đầu quá trình chính. Tập lệnh thiết lập này có thể điền khối lượng được gắn với các thư mục cần thiết.

Để giải thích hành vi - lệnh của bạn RUN mkdir /uploads/folder1 đã tạo thư mục trong hình ảnh, nhưng bạn shadowed thư mục với khối lượng gắn, vì vậy bạn không thấy thư mục này (thư mục là trong hình ảnh, không phải trong thư mục chủ). Bạn không thể tạo các thư mục trên ổ đĩa trong Dockerfile của bạn, vì khối lượng được gắn kết vào thời gian chạy sau (container).

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