Bắt đầu soạn thảo docker với systemd trên Ubuntu 15.04


10

Tôi có một dự án soạn thảo docker mà tôi muốn kiểm soát thông qua systemd. Để bắt đầu, tôi sẽ sử dụng một kịch bản trông như thế này:

description "Start/Stop server"
author "Jim Cortez"

start on filesystem and started docker
stop on runlevel [!2345]

respawn limit 3 240

pre-start script
    # wait (if necessary) for our docker context to be accessible
    while [ ! -f /projects/my_server/docker-compose.yml ]
    do
      sleep 1
    done
    /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
end script

script
    sleepWhileAppIsUp(){
        while docker ps | grep "$1" >/dev/null; do
            sleep 2
        done
    }

    sleepWhileAppIsUp "my_server"
end script

# stop docker container after the stop event has completed
post-stop script
    if docker ps | grep my_server;
    then
        /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop
    fi
end script

(ở trên thích nghi từ đây )

Tuy nhiên, tôi hiện đang chạy trên một máy chủ docker chạy Ubuntu 15.04, đã chuyển sang systemd. Làm thế nào tôi có thể làm như trên như một kịch bản dịch vụ systemd? Chỉ cần khởi chạy trình nền soạn thảo docker sẽ không cho phép systemd theo dõi và khởi động lại trong trường hợp thất bại.

Đây là những gì tôi có cho đến nay:

[Unit]
Description=My Server container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop

[Install]
WantedBy=local.target

Câu trả lời:


11

Tôi đề nghị loại bỏ các -dtùy chọn. Bạn không cần phải chạy các container trong nền trong trường hợp này.


6

Tôi thấy rằng: Tác giả sử dụng một cách tiếp cận tương tự như bạn http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ . Nhưng ngoài ra, anh ta tạo ra một dịch vụ systemd cho mỗi dịch vụ soạn thảo docker.

Bạn có thể cân nhắc chuyển đổi tập tin docker-compose thành nhiều tập tin dịch vụ systemd để loại bỏ sự phụ thuộc của docker-compose: http://container-transform.readthedocs.org/ Tôi đã sử dụng phương pháp đó, nó hoạt động tốt cho các thiết lập đơn giản.


1
bạn có thể muốn đưa một số thông tin bổ sung từ các liên kết vào câu trả lời của mình, các liên kết có xu hướng không hoạt động sau một thời gian.
Dennis Nolte

1
Thật vậy, liên kết không hoạt động nữa ^^.
christophe31

Dưới đây là một liên kết Internet Archive đến bài viết trên blog đầu tiên: web.archive.org/web/20161105135126/http://trackless.ca/2015/12/...
pdoherty926

0

Hãy thử điều này, tôi thấy trong thử nghiệm của mình, nó đòi hỏi nhiều thời gian hơn dịch vụ bình thường để bắt đầu hoặc dừng.

[Unit]
Description=My Server container
Requires=docker.service
After=network.target docker.service

[Service]
#Restart=always
Type=simple
WorkingDirectory=/projects/my_server
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml down

[Install]
WantedBy=multi-user.target

1
Tôi nghĩ bạn nên sử dụng WorkDirectory. docker-compose sử dụng thư mục làm việc hiện tại để tải các tệp .env WorkDirectory = / dự án / my_server cũng ExecStart = / usr / local / bin / docker-compose up
Mohammadalijf
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.