问题
已在Dockerfile里yum install docker
但docker run 启动容器后, docker ps等命令无法执行
ps -aux 没有dockerd 进程
临时解决
另开一个终端
docker exec -it 容器名 bash
手动启 dockerd
默认启动
分析
现在启动容器的默认命令是 /sbin/init
sbin/init 是根文件系统提供的用户进程,它是第一个被执行的用户进程
想用 /sbin/init 启动dockerd
ps -aux 查看有rsyslog
rsyslog是作为一个系统服务,由systemctl启的
所以, 增加一个系统服务, 启动 dockerd
增加系统服务(通常的步骤)
添加文件 docker.service 放到 /etc/systemd/system/
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable docker.service
sudo systemctl start docker.service
或 sudo reboot
加到Dockerfile
docker.service 文件在Dockerfile 里COPY, 再enable
# Dockerfile增加
COPY docker.service /etc/systemd/system/docker.service
RUN systemctl enable docker.service
这样docker run xxx 启动的容器, dockerd 就能默认启动了
参考
- 第一个用户进程 — 根文件系统 sbin/init 进程 及其配置文件 /etc/inittab
https://www.cnblogs.com/god-of-death/p/18224900 - 网上搜 “/sbin/init 启动dockerd”