Windows10上的 Docker“驱动程序在端点编程外部连接失败”

我试图使用 $ docker-compose up -d为一个项目,并得到这个错误消息:

错误: for api 无法启动服务 api: 驱动程序在端点数据探索 _ api _ 1(8781c95937a0a4b0b8da23376f71d2fc135f46aad011401c019eb3d14a0b117)上编程外部连接失败: 启动用户地代理时出错: mkdir/port/tcp: 0.0.0.0:9000: tcp: 172.19.0。2:80: 输入/输出错误 提出项目时遇到错误。

我想知道是不是港口?我之前一直在尝试8080端口。这个项目最初是在 Mac 上设置的,我已经从 gitHub 克隆了存储库。

68730 次浏览

在我的 Windows 10 Pro/Docker v17.06.1-ce-win24/Docker-Compose v1.14.0中,我在管理模式下使用 Windows PowerShell x86得到了同样的错误消息。

解决方案是简单地重启 Docker。

如果发生一次,重新启动 Docker 将完成这项工作。对我来说,每次重启电脑都会发生这种情况。

在这种情况下,禁用快速启动,或者您可能每次启动计算机时都会重新启动 Docker。该溶液从 给你中获得

我也得到了这个错误,如果你想知道发生错误的主要原因,它是因为 Docker 已经运行了一个类似的容器,来解决问题(避免重新启动 Docker) ,你必须:

docker container ls

你得到了类似的东西:

CONTAINER ID        IMAGE               COMMAND             CREATED
1fa4ab2cf395        friendlyhello       "python app.py"     28 seconds ago

这是正在运行的容器的列表,采用 CONTAINER ID (复制 Ctrl + C)

现在您必须结束进程(并让运行另一个映像)运行这个命令。

docker container stop <CONTAINER_ID>

就是这样! 现在您可以创建容器了。

欲了解更多信息,请访问 https://docs.docker.com/get-started/part2/

这个回答有点晚了,但我还是把它留在这里,也许能帮到其他人 在 Mac Mojave 上重启了很多次 Mac 和 Docker 我不得不 sudo apachectl stop

仅仅重新启动 Docker 并没有解决我在 Windows10上的问题。

在我的例子中,我通过以下步骤解决了这个问题:

1)关闭“ Docker Desktop”

2)执行以下命令:

net stop com.docker.service
net start com.docker.service

3)重新启动“ Docker Desktop”

希望这能帮到别人。

  • 解决这个问题的最简单方法是重新启动码头。但是在某些情况下,即使您没有在港口中运行的任何容器,它也可能无法工作。您可以使用 docker ps命令检查正在运行的容器,并且可以看到在使用 docker ps -a命令之前没有清除但退出的所有容器。

假设有一个具有容器 id 8e35276e845e的容器,您可以使用命令 docker rm 8e35276e845edocker rm 8e3来结束容器.注意,前3个字符串是特定的 Docker 容器 id 的 id。因此,根据上述场景 < em > 8e3 是 < em > 8e35276e845e 的 id

  • 如果重新启动不起作用,您可以尝试更改 码头作曲文件中的服务端口,根据 apache 端口,您必须更改 v-host 的端口(如果有的话)。这会解决你的问题。

例如:

    build:
context: ./apache
dockerfile: Dockerfile
working_dir: /var/www/
volumes:
- .:/var/www
networks:
- app-network
ports:
- 8082:80
depends_on:
- mysql_db

应该换成

apache_server:
build:
context: ./apache
dockerfile: Dockerfile
working_dir: /var/www/
volumes:
- .:/var/www
networks:
- app-network
ports:
- 8083:80
depends_on:
- mysql_db

特定的 V 型主持人也必须改变,

例(根据上述情况) :

<VirtualHost *:80>
ProxyPreserveHost On
ServerAlias phpadocker.lk
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/
</VirtualHost>

这将有助于你解决上述问题。

在我的例子中,问题是 docker 容器(Nginx)使用80端口,而 IIS 使用相同的端口。在 IIS 中设置另一端口解决问题

对于那些有同样问题的 Windows 用户,我建议他们也重新启动计算机,因为大多数时候(至少对我来说)重新启动 Docker 是不起作用的。因此,我建议你遵循以下步骤:

  1. 重启你的电脑。
  2. 然后以管理员身份启动 PowerShell 并运行以下命令:

    Set-NetConnectionProfile -interfacealias "vEthernet (DockerNAT)" -NetworkCategory Private

  3. 然后重启你的 Docker。

完成这些步骤后,您将能够运行没有问题。 希望能帮上忙。

我知道已经有很多答案了,但是没有一个能为我解决这个问题。相反,我通过 重置码头到工厂默认值消除了这个错误消息:

enter image description here

通常,当您试图启动一个容器,但是容器所需的端口被同一个 Docker 占用时,会发生这个错误,这通常是由于最近的一个错误进程停止了。

对我来说,解决办法是:

  1. 像管理员一样打开 windows CMD,键入 netstat -oan查找占据端口的进程(Docker 就是那个进程) :

在我的情况下,我的码头端口是3306600180009001。

  1. 现在我们需要释放那个端口,所以我们要通过 PID (列 PID)杀死这个进程,输入

    TASKKILL /PID 9816 /F
    
  2. Restart docker.

  3. Be happy.

Regards.

在大多数情况下,您应该考虑的第一种情况是有一个正在运行并使用该端口的旧服务。 在我的例子中,由于我改变了映像的名称,那么当使用 docker-compose 停止(然后向上)时,它不会停止旧的容器(服务) ,导致新的容器无法启动。