Docker、主机操作系统重启和繁忙的端口

标签 docker docker-compose port

我开始学习 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/

相关文章:

c - Linux API/库枚举特定IP的所有监听端口

python - 如何通过包含特定 python 版本的 docker 从 linux 运行 python 代码

docker - redis docker - 创建一个包含数据的容器

java - 简单的 Java IRC 客户端

java - [Java with Docker-compose] : java. io.FileNotFoundException :/var/lib/data/17. txt (没有这样的文件或目录)

docker - 有没有一种方法可以从容器内部使docker config可编辑?

mysql - 通过备用端口建立 mysql 连接

docker - 运行 docker 容器 : iptables: No chain/target/match by that name

amazon-web-services - 如何实现重新烘焙 AMI 的一致性

docker msys2 : Too many levels of symbolic links