Tôi đã cố gắng khắc phục sự cố này trong bộ chứa Dock của CentOS: 7. Tôi đã theo dõi chủ yếu Hướng dẫn về dự án hình ảnh Dock của CentOS .
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
# Install anything. The service you want to start must be a SystemD service.
CMD ["/usr/sbin/init"]
Bây giờ, xây dựng hình ảnh và chạy nó bằng cách sử dụng ít nhất các đối số sau đây để ra docker runlệnh:-v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro
Sau đó, điểm chính là /usr/sbin/initphải là quá trình đầu tiên bên trong container Docker.
Vì vậy, nếu bạn muốn sử dụng một tập lệnh tùy chỉnh thực thi một số lệnh trước khi chạy /usr/sbin/init, hãy khởi chạy nó ở cuối tập lệnh của bạn bằng cách sử dụng exec /usr/sbin/init(trong tập lệnh bash).
Đây là một ví dụ:
ADD cmd.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/cmd.sh
CMD ["/usr/local/bin/cmd.sh"]
Và đây là nội dung của cmd.sh:
#!/bin/bash
# Do some stuffs
exec /usr/sbin/init # To correctly start D-Bus thanks to https://forums.docker.com/t/any-simple-and-safe-way-to-start-services-on-centos7-systemd/5695/8
Bạn có thể có System is booting up. See pam_nologin(8)nếu bạn sử dụng hệ thống PAM, trong trường hợp đó, hãy xóa /usr/lib/tmpfiles.d/systemd-nologin.conftrong Dockerfilevì bạn tạo tệp /var/run/nologintạo ra lỗi cụ thể này.
sudo?