Đầu tiên, có một vấn đề trong bạn Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Hình ảnh Docker không lưu các quy trình đang chạy. Do đó, RUN
lệnh của bạn chỉ thực thi trong docker build
giai đoạn và dừng sau khi quá trình xây dựng hoàn thành. Thay vào đó, bạn cần chỉ định lệnh khi container được bắt đầu bằng cách sử dụng các lệnh CMD
hoặc ENTRYPOINT
như dưới đây:
CMD mysql start
Thứ hai, container docker cần một tiến trình (lệnh cuối cùng) để tiếp tục chạy, nếu không container sẽ thoát / dừng. Do đó, service mysql start
lệnh bình thường không thể được sử dụng trực tiếp trong Dockerfile.
Giải pháp
Có ba cách điển hình để duy trì quá trình chạy:
Điều này thường được ưa thích khi bạn có một dịch vụ duy nhất đang chạy vì nó làm cho nhật ký xuất ra có thể truy cập vào docker.
Điều này chỉ hoạt động nếu có một kịch bản như thế mysqld_safe
.
Điều này là tốt nhất nếu lệnh phải thực hiện một loạt các bước, một lần nữa, /start.sh
nên tiếp tục chạy.
Ghi chú
Đối với người mới bắt đầu sử dụng supervisord
không được khuyến khích. Thành thật mà nói, nó là quá mức cần thiết. Sẽ tốt hơn nhiều khi sử dụng dịch vụ đơn / lệnh đơn cho container.
BTW: vui lòng kiểm tra https://registry.hub.docker.com để biết hình ảnh docker mysql hiện có để tham khảo