驱动程序在Redis的外部连接点上失败:绑定到0.0.0.0:6379失败:端口已经被占用。

4

我正在尝试运行

/usr/bin/docker run --rm -v /var/data/redis:/data -v /var/data/conf/redis.conf:/usr/local/etc/redis/redis.conf --name redis -p 6379:6379 redis:5.0.3-alpine3.9

但是我得到的是:
/usr/bin/docker: Error response from daemon: driver failed programming external connectivity on endpoint redis (f16f19b7727a710fb6c96be566dac66ce26282982960d97faa28861c24fcf2fb): Bind for 0.0.0.0:6379 failed: port is already allocated.

当我尝试使用netstat检查端口时,出现以下信息:

[root@artik ~]# netstat -nlpute | grep 6379
tcp6       0      0 :::6379                 :::*                    LISTEN      0          14384       2471/docker-proxy

目前我没有正在运行的Docker容器。

我不理解这个问题,我该怎么办?

[root@artik ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

无操作,没有容器正在运行。 - Juliatzin
添加 docker ps -a 的输出结果。 - vivekyad4v
仅返回已停止的容器,不要在docker ps -a中显示任何内容。 - Juliatzin
added to question - Juliatzin
我已经重新启动了,现在一切都正常了。我永远不会知道发生了什么 :( - Juliatzin
显示剩余2条评论
4个回答

5

我必须采取以下步骤才能使一切运作正常:

sudo service docker stop
sudo rm /var/lib/docker/network/files/local-kv.db
sudo service docker start
docker system prune

然后再尝试一次。


2
sudo service docker stop 然后 sudo service docker start 对我来说解决了这个问题(不需要其他命令)。谢谢。 - DannyMoshe

1
根据你的netstat输出,很明显有一个进程占用了6379端口。
[root@artik ~]# netstat -nlpute | grep 6379
tcp6       0      0 :::6379                 :::*                    LISTEN      0          14384       2471/docker-proxy
docker-proxy进程是在使用docker run进行端口转发时创建的,这在您的情况下是正确的,即-p 6379:6379
有关docker-proxy的更多信息,请查看this
我怀疑您之前运行了一个使用端口6379的redis容器,但该容器未被正确删除,导致进程docker-proxy一直运行,因此您收到了端口已分配的消息。
希望这可以帮助您。

0

在docker-compose文件中删除ports - ...,让它自己分配端口。或者将主机上的端口映射从6379:6379更改为6378:6379,这对我有用。在执行此操作之前,您可能需要清除已启动的容器。docker rm -f $(docker ps -a -q)


0

正如DannyMoshe建议的那样,对于其他人也是适用的。

在可能破坏整个设置之前,请尝试此操作:

sudo service docker stop
sudo service docker start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接