2015-01-07 36 views
6

Tôi đã tạo vùng chứa dữ liệu chỉ chứa các tệp HTML tĩnh được dự định sẽ sử dụng bởi vùng chứa nginx. Mục tiêu là ứng dụng web của tôi đang cung cấp một khối lượng mà nginx có thể sử dụng.docker đang chạy vùng chứa dữ liệu từ đầu

Vì lý do này, tôi đã tạo ra một Dockerfile đơn giản:

FROM scratch 
MAINTAINER me <[email protected]> 
ADD dist/ /webappp/ 

Khi tôi chạy container được tạo ra từ dòng lệnh run -d -v /webappp --name webapp myOrg/webapp echo yo

tôi nhận được lỗi Error response from daemon: Cannot start container db7fd5cd40d76311f8776b1710b4fe6d66284fe75253a806e281cd8ae5169637: exec: "echo": executable file not found in $PATH mà nếu tất nhiên đúng vì hình ảnh không có lệnh ở tất cả các có thể được thực hiện. Chạy một container không có lệnh là không thể.

Trong khi lỗi này trên dòng lệnh không phải là một vấn đề lớn đối với tôi vì tôi biết vùng chứa dữ liệu vẫn được tạo và bây giờ có thể được truy cập bởi nginx, nó không thành công nếu tôi muốn tự động hóa nó với Vagrant. Các quy trình tự động luôn thất bại vì lỗi này.

Giải pháp duy nhất của tôi cho đến nay là mở rộng hình ảnh nhỏ của tôi từ một bản phân phối mà IMHO không có ý nghĩa đối với một vùng chứa dữ liệu chỉ để gọi echo hoặc true!

Có lệnh NOP exec trong docker hay docker cần luôn thực hiện điều gì đó, có thể chạy vùng chứa không có gì hoặc không tạo ra lỗi.

+0

Tôi không chắc liệu trợ giúp này có giúp bạn thử http://stackoverflow.com/questions/25845785/most-appropriate-container-for-a-data-only-container? Nhân tiện, tôi đã sử dụng busybox cho vùng chứa dữ liệu của mình. –

Trả lời

7

Như đã đề cập trong cuốn hướng dẫn Docker: Bình chứa không cần phải được chạy. Nó cũng không nói rằng container "nên" có thể chạy ở tất cả.

Vì vậy, thay vì lặp lại điều gì đó ngu ngốc bằng cách chạy vùng chứa dữ liệu, ví dụ: docker run -v /webappp --name webapp myOrg/webapp echo yo

Đã đủ để chỉ cần tạo vùng chứa và không bao giờ chạy/khởi động nó.

docker create -v /webappp --name webapp myOrg/webapp

Lưu ý để tự: Vagrant không hỗ trợ Docker tạo khi trích lập dự phòng!

+0

Câu trả lời hay! Lưu ý rằng trong docker 1.5.0 tôi đã phải thêm một lệnh để chạy cho 'docker create' để làm việc. Tất nhiên, lệnh không cần phải tồn tại, vì container sẽ không bao giờ chạy. – rollingBalls

3

Tại sao bạn sử dụng đầu?

Chỉ cần sử dụng hình ảnh nginx làm cơ sở. Bạn đã có hình ảnh được lưu trong bộ nhớ cache để nó không chiếm thêm dung lượng và bạn sẽ có thể gọi echo.

Một số tài liệu tham khảo cho các thùng chứa dữ liệu:

+0

Bạn đúng về kích thước! Nhưng tôi không muốn có bất kỳ chi phí nào (nói theo nghĩa bóng). Một ngày nào đó ai đó có thể bắt đầu chứa dữ liệu chỉ vì anh ta có thể bị cám dỗ khi nghĩ "Này" đây là nginx bằng cách đọc tên của nó. Nó thậm chí sẽ làm việc nhưng chắc chắn không phải với cấu hình nginx bạn muốn.Bởi vì không ai lấy và sẽ chăm sóc cập nhật dữ liệu chỉ từ hình ảnh và có nó đồng bộ với cấu hình nginx làm việc. Vì vậy, với tôi đây chỉ là một giải pháp cho một workaround bằng cách sử dụng như busybox hoặc bất kỳ distro mini khác. – Vadimo

+0

Vâng, không phải vì tôi không nghĩ rằng bạn có thể ghi đè lên lệnh echo với 'docker start'. Ngẫu nhiên, đây là một lý do tốt để đặt một mô tả của container bên trong lệnh echo vì nó sẽ hiển thị trên docker ps và kiểm tra. –

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