我第一次使用docker,我试图实现这个- https://docs.docker.com/get-started/part2/#tag-the-image

在一个阶段,我试图通过这个命令连接到localhost -

$ curl http://localhost:4000

哪个显示了这个错误-

curl: (7) Failed to connect to localhost port 4000: Connection refused

但是,我已经通过以下代码解决了这个问题-

$ docker-machine ip default
$ curl http://192.168.99.100:4000

在那之后一切都很顺利,但在最后一部分,我试图根据教程使用下面的行来运行应用程序……

$ docker run -p 4000:80 anibar/get-started:part1

但是,我得到了这个错误

C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint goofy_bohr (63f5691ef18ad6d6389ef52c56198389c7a627e5fa4a79133d6bbf13953a7c98): Bind for 0.0.0.0:4000 failed: port is already allocated.

当前回答

对于仍然在寻找解决方案的人,只需确保在docker-compose.yml中以正确的方式绑定了端口

它是: —<外部服务器端口>:<内部容器端口>

其他回答

在Linux上,您可以运行sudo netstat -tulpn来查看该端口上当前正在监听的内容。然后,您可以选择配置该进程或Docker容器绑定到不同的端口,以避免冲突。

在启动一个使用相同端口的新容器之前,您需要确保之前启动的容器已被杀死。

docker container ls
docker rm -f <container-name>

快速修复是一个重启docker:

Sudo服务停止 Sudo服务docker启动

我尝试了上面所有的答案,没有一个有效,在我的情况下,即使docker容器ls也没有显示任何容器正在运行。看起来问题是由于docker代理仍然在使用端口,尽管没有运行容器。就我而言,我使用的是ubuntu。以下是我尝试并解决的问题,只需运行以下两个命令:

sudo service docker stop
sudo rm -f /var/lib/docker/network/files/local-kv.db

对我来说,问题是将同一个端口映射两次。

由于参数化的码头运行,它最终像这样

docker run -p 4000:80 -p 4000:80 anibar/get-started:part1

注意端口4000上的双映射。

在这种情况下,日志没有提供足够的信息,因为它没有说明我是双映射的原因,并且在docker run命令返回失败后,端口不再绑定。