我开始学习 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 号:
为什么有时在重新启动主机系统后我看到容器中的更改没有保存?换句话说 - 在重新启动并从上面的容器发出命令后,它处于没有最后更改的状态,我在重新启动主机之前做了一段时间。
最佳答案
通常,如果您的 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 服务,并且不会发现任何容器自动启动。
关于Docker、主机操作系统重启和繁忙的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432031/