Làm thế nào để chạy docker-compose khi khởi động?


20

Đây là trên máy ảo Ubuntu 14.04 LTS chạy Docker và tôi nghi ngờ respawnlà nguyên nhân gây ra sự cố của tôi nhưng không chắc chắn về giải pháp lý tưởng.

Tập lệnh khởi động hiện tại ( cat /etc/init/dockersuitecrm.conf)

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

Điều này 'hoạt động' trong đó myapplà sống động và đáp ứng nhưng /sbin/initchiếm hết CPU khi tôi theo dõi htop. Nếu tôi xóa mục nhập từ upstart ( sudo rm /etc/init/dockersuitecrm.conf) và SSH thủ công trong và chạy, docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp starttôi không thấy cpu có vấn đề 100% và như trước đây myappvẫn còn sống và phản hồi.

Vì vậy, tôi nghi ngờ cách tôi bắt đầu soạn thảo docker ở trên là không chính xác. Cách đúng đắn để bắt đầu docker-composelà luôn chạy mà không cần can thiệp thủ công?

EDIT: Không nên quan trọng nhưng /usr/bin/myapp -> /home/batman/dockerapps/myapplà một liên kết tượng trưng.


Không phải là một giải pháp mà là một cách giải quyết, tôi có thể chạy nó mà không cần respawnlệnh trong tập lệnh.
DeepSpace101

Cùng một câu hỏi, nhưng tôi đã thấy điều này: serverfault.com/questions/615820/ . Điều kỳ diệu là với việc sử dụng docker-compose start.
Mark Lopez

Tôi có một cấu hình tương tự nhưng không sử dụng một scriptkhối. Có lẽ đó là một phần của vấn đề? Tôi có chdir /usr/bin/myapp/và trên dòng tiếp theo exec docker-compose upthay thế.
jmreicha

Không phải bạn chỉ muốn chạy docker-compose trong nền? tức làdocker-compose up -d
KCD

đặt khởi động lại: luôn luôn trong thông số kỹ thuật của container
Lu32

Câu trả lời:


9

Đơn giản chỉ cần sử dụng crontab, thay vì sử dụng một khoảng thời gian chỉ cần nói @reboot

Vì vậy, đăng nhập như người dùng nên bắt đầu tập lệnh này và gõ lệnh

crontab -e

và sau đó nhập

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

Khởi động lại hệ thống và xem nếu nó hoạt động. Có một lợi thế so với khởi đầu, ngay cả khi nó được bắt đầu muộn hơn một chút, bạn không phải lo lắng nhiều về sự phụ thuộc như mạng, v.v.


Bất cứ ý tưởng làm thế nào sạch sẽ một khởi động lại sẽ chạy nó theo cách này?
Justin Smith

1
Xin lỗi, nhưng đây không phải là một câu trả lời hay. Nó có thể hoạt động theo thời gian, nhưng vì cron có thể được tải trước các yêu cầu docker khác, bạn gặp phải tình trạng đua.
Otheus

2

Giả sử bạn đang sử dụng phiên bản 2 của Docker Soạn các định nghĩa trong bạn docker-compose.yml, bạn có thể làm như sau:

Xác định restart: alwaysnhư vậy:

version: '2'
services:
  web:
    image: nginx
    restart: always

Tham khảo: https://docs.docker.com/compose/compose-file/compose-file-v2/


1
Câu hỏi đặt ra là, trang web nào của docker không trả lời, là: "Cách đúng đắn để bắt đầu soạn thảo docker luôn chạy mà không cần sự can thiệp thủ công?"
Otheus

0

Docker chưa sẵn sàng ngay lập tức Nếu bạn chạy tập lệnh quá sớm, sẽ không có gì xảy ra. Docker sẽ bắt đầu phản hồi lệnh docker ps ngay khi nó sẵn sàng để bạn có thể sử dụng thủ thuật này trong crontab:

nano / etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml bắt đầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.