2014-09-22 24 views
8

Hãy xem xét các Dockerfile sau:Viết để Docker khối lượng từ Dockerfile không hoạt động

FROM phusion/baseimage 
VOLUME ["/data"] 
RUN touch /data/HELLO 
RUN ls -ls /data 

Vấn đề: "/ data" thư mục không chứa "HELLO" tập tin. Hơn nữa, bất kỳ nỗ lực nào khác để ghi vào thư mục âm lượng (qua echo, mv, cp, ...) đều không thành công - thư mục luôn trống. Không có thông báo lỗi nào được hiển thị.

Tôi không thể tìm thấy bất kỳ điều gì trong tài liệu hoặc về ngăn xếp liên quan đến vấn đề này.

Đây có phải là điều nổi tiếng hoặc mới không?

docker version lợi nhuận:

Client version: 1.2.0 
Client API version: 1.14 
Go version (client): go1.3.1 
Git commit (client): fa7b24f 
OS/Arch (client): linux/amd64 
Server version: 1.2.0 
Server API version: 1.14 
Go version (server): go1.3.1 
Git commit (server): fa7b24f 

Trả lời

8

Mỗi bước của Dockerfile được chạy trong bao bì riêng của nó mà được bỏ đi khi bước đó được thực hiện, và khối lượng sẽ bị loại bỏ khi người cuối cùng (trong trường hợp này chỉ) chứa sử dụng chúng sẽ bị xóa sau khi lệnh kết thúc. Điều này làm cho khối lượng kém phù hợp để sử dụng trong Dockerfiles vì chúng mất nội dung của chúng một nửa. Các tập tin Docker được dự định có thể chạy ở mọi nơi, và nếu chúng sử dụng các khối lượng vẫn tồn tại, nó sẽ làm cho việc này trở nên khó khăn hơn. Mặt khác, nếu bạn thực sự muốn điều này, chỉ cần trở lại khối lượng với một thư mục trên máy chủ.

PS: Khởi tạo thư mục dữ liệu của máy chủ được thực hiện tốt nhất bên ngoài tệp Docker.

Lần cuối cùng tôi cần điều này tôi đã rời bước này ra khỏi tệp docker vì ý tưởng của bước này là chuẩn bị máy chủ để chạy Hình ảnh được tạo bởi Dockerfile này. Sau đó, tôi đã làm một container với docker chạy và trong container đó tôi chạy công cụ thiết lập DB thông thường.

docker run -v /var/lib/mysql:/raid/.../mysql ... 
/usr/bin/mysql_install_db 
mysql_secure_installation 

Bây giờ khi vùng chứa này được chuyển đến máy chủ mới, thư mục dữ liệu có thể được mang theo hoặc tạo bằng cách sử dụng cùng một quy trình trên máy chủ đó. Hoặc nếu, như trong ví dụ của tôi, bạn muốn một db mysql khác cho một số ứng dụng khác mà bạn không phải lặp lại việc tạo vùng chứa.

Ý tưởng quan trọng là giữ riêng vùng chứa và thiết lập máy chủ lưu trữ.

+0

Cảm ơn bạn đã giải thích rất tốt về nguồn sự cố. Làm cách nào để sao lưu ổ đĩa bằng thư mục "lúc xây dựng" ?. Vì vậy, ví dụ, khởi tạo cơ sở dữ liệu được thực hiện trong quá trình xây dựng. – akhikhl

+0

Tôi sẽ anser này trong một chỉnh sửa. –

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