Tôi đang ghi đè /usr/lib/systemd/system/docker.service
tập lệnh khởi động để mở rộng tập lệnh bằng tệp môi trường. Tôi đã xác định tập tin cấu hình của mình /etc/systemd/system/docker.service.d/docker.conf
như sau:
test -d /etc/systemd/system/docker.service.d || \
mkdir /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/docker.conf <<EOF
[Service]
EnvironmentFile=/etc/sysconfig/docker
ExecStartPre=-/usr/local/sbin/generate-docker-config
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --dns=\${LOCAL_IPV4}
EOF
systemctl daemon-reload
Tôi đang chạy tập lệnh trên dưới dạng bước xây dựng Packer cho AMI.
Khi tôi khởi chạy AMI của mình, tôi thấy đầu ra trạng thái sau về dịch vụ Docker từ SystemD:
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
└─docker.conf
Active: active (running) since Mon 2016-03-28 21:16:11 UTC; 6min ago
Docs: https://docs.docker.com
Main PID: 858 (docker)
CGroup: /system.slice/docker.service
├─ 858 /usr/bin/docker daemon -H fd:// --dns=10.224.4.178 --log-driver=syslog --log-opt tag={{.ImageName}}
Nó không chạy của tôi ExecStartPre
, như đã thấy trong đầu ra. Nếu tôi làm như sau, tôi làm thấy rằng nó bây giờ đã chạy script khởi động:
# systemctl daemon-reload && systemctl restart docker.service && \
systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
└─docker.conf
Active: active (running) since Mon 2016-03-28 22:05:24 UTC; 24ms ago
Docs: https://docs.docker.com
Process: 1873 ExecStartPre=/usr/local/sbin/generate-docker-config (code=exited, status=0/SUCCESS)
Main PID: 1876 (docker)
CGroup: /system.slice/docker.service
└─1876 /usr/bin/docker daemon -H fd:// --dns=10.224.4.178 --log-driver=syslog --log-opt tag={{.ImageName}}
Lưu ý làm thế nào bây giờ có ExecStartPre
đầu ra trạng thái?
Có lệnh nào tôi nên chạy trong bản dựng Packer của mình ngoài daemon-reload
việc khiến SystemD tải và chạy tệp cấu hình dịch vụ và ExecStartPre
tập lệnh mới không? Tôi có nên chỉ restart
là dịch vụ trong bản dựng Packer, hay có một giải pháp tốt hơn, phù hợp hơn cho vấn đề này không?
LƯU Ý: ExecStartPre
Tập lệnh của tôi cần mạng có sẵn curl
cho các thẻ ví dụ EC2. Tệp dịch vụ Docker không chỉ định After=network.target docker.socket
vì vậy tôi cho rằng nó sẽ chạy sau khi mạng bắt đầu.
ExecStartPre
. Phiên bản Packer EC2 bị tắt, và lần sau khi nó được khởi chạy là AMI cho một thể hiện EC2 mới, và vấn đề là trong giai đoạn này , nó không gọi được tập lệnh.