我开始学习docker,并在Linux ubuntuserver 4.15.0-34-generic上使用它。我通过以下命令创建了容器:
sudo docker run -d --privileged --name FBSServer --hostname BACKUPSERVER --restart=always -p 4530:4530 -p 4531:4531 -v /home/adminek/synology:/fbs ferro/backupsystem FBS_Server
如您所见,容器正在侦听端口4530和4531。当我第一次运行此命令时,一切正常。容器正在运行,我可以使用端口4530/4531与应用通信。
但是在重新启动主机系统后,容器处于“退出”状态
root@ubuntuserver:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e77a4729847 ferro/backupsystem "/start.sh FBS_Server" 7 hours ago Exited (128) About a minute ago FBSServer
,我无法启动容器。我看到了:
root@ubuntuserver:~# docker container start FBSServer
Error response from daemon: driver failed programming external connectivity on endpoint FBSServer (c2afb35a61a18c65e8c306bbf36d4e2c9cdf428aafa386e12281d2d9e714b238): Error starting userland proxy: listen tcp 0.0.0.0:4531: bind: address already in use
Error: failed to start containers: FBSServer
为了开始,我必须输入以下命令:
root@ubuntuserver:~# lsof -i :4530 | grep LISTEN
docker-pr 1328 root 4u IPv6 35086 0t0 TCP *:4530 (LISTEN)
root@ubuntuserver:~# lsof -i :4531 | grep LISTEN
docker-pr 1316 root 4u IPv6 35059 0t0 TCP *:4531 (LISTEN)
然后我杀死进程(在此示例中为1328和1316),然后可以通过键入以下内容启动容器:
docker container start FBSServer
所以问题1: 重新引导后,为什么主机系统端口“繁忙”?
和数字2: 为什么有时在重启主机系统后,我发现容器中的更改未保存?换句话说-重启后,上面容器中的命令已启动,但它的状态没有最后更改,我在重启主机之前做了一会儿。
答案 0 :(得分:1)
通常,如果您的 docker 容器自动启动并分配一些端口,则您错误地添加了选项 --restart
以自动启动容器。
所以如果你重启 docker 服务后,docker-pr
服务分配了某个容器的端口,你的容器会自动启动。
启动 docker 后,检查是否有一些容器正在运行:
docker ps
要停止这个容器,我们可以使用:
docker stop container_name
如果您有多个容器,我们可以使用:
docker stop $(docker ps -a -q)
通常,如果您有某个容器自动启动,您可以使用 docker --restart
进行设置,我们需要将其从自动重启中移除。
要做到这一点,请使用以下命令:
docker update --restart=no container_name
此后,您将能够重新启动 docker 服务,并且您将不会发现任何容器自动启动。
答案 1 :(得分:0)
尝试在sudo /etc/init.d/docker restart
之后重新启动docker服务,它应该可以解决问题