Windows 10“驱动程序上的Docker无法在端点上编程外部连接”

时间:2017-06-07 13:30:23

标签: windows github windows-10 docker-compose

我正在尝试将$ docker-compose up -d用于项目,并收到此错误消息:

  

错误:API无法启动服务API:驱动程序未能编程端点dataexploration_api_1外部连接(8781c95937a0a4b0b8da233376f71d2fc135f46aad011401c019eb3d14a0b117):错误启动用户级代理:MKDIR /port/tcp:0.0.0.0:9000:tcp:172.19.0.2:80:输入/输出错误   在启动项目时遇到错误。

我想知道它是否可能是端口?我以前一直在尝试端口8080。该项目最初是在mac上设置的,我已经从gitHub克隆了存储库。

提前非常感谢你!

11 个答案:

答案 0 :(得分:195)

我在管理员模式下使用Windows Powershell x86在Windows 10 Pro / Docker v17.06.1-ce-win24 / Docker-Compose v1.14.0上收到了相同的错误消息。

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

答案 1 :(得分:53)

如果发生一次,重启Docker将完成工作。就我而言,每次重新启动计算机时都会发生这种情况。

在这种情况下,MockFileDatabase,或者您可能会在每次启动计算机时重新启动Docker。该解决方案来自disable Fast Startup

答案 2 :(得分:41)

简单地重新命名Docker并不能在Windows 10上解决我的问题。

就我而言,我通过以下确切步骤解决了该问题:

1)关闭“ Docker桌面”

2)运行以下命令:

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

3)再次启动“ Docker Desktop”

希望这会对其他人有所帮助。

答案 3 :(得分:6)

我知道已经有很多答案了,但是没有一个人为我解决了这个问题。
相反,我通过将docker重置为出厂默认值摆脱了这个错误消息:

enter image description here

答案 4 :(得分:3)

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

docker container ls

您得到了类似的东西:

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

这是正在运行的容器的列表,带有容器ID(复制 Ctrl + C

现在您必须结束该过程(并运行另一个图像)来运行此命令。

docker container stop <CONTAINER_ID>

仅此而已!现在您可以创建容器了。

有关更多信息,请访问https://docs.docker.com/get-started/part2/

答案 5 :(得分:2)

在我的情况下,问题是docker容器(Nginx)使用80端口,而IIS使用相同的端口。在IIS中设置另一个端口可以解决问题

答案 6 :(得分:2)

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

对我来说解决方案是:

  1. 像管理员一样打开Windows CMD,键入netstat -oan来查找占用您端口的进程(Docker是该进程):

在我的情况下,我的docker端口是3306 6001 8000 9001。

  1. 现在我们需要释放该端口,因此我们要通过输入

    的PID(列PID)终止该进程。
    TASKKILL /PID 9816 /F
    
  2. 重新启动docker。

  3. 开心。

致谢。

答案 7 :(得分:1)

在大多数情况下,您应该考虑的第一种情况是正在运行并使用该端口的旧服务。 就我而言,由于我更改了映像名称,因此在使用docker-compose停止(然后启动)时,它不会停止旧容器(服务),导致无法启动新容器。

答案 8 :(得分:0)

一个较晚的答案,但我将其留在此处可能会帮助其他人 在Mac和docker大量重启后的Mac mojave上 我不得不sudo apachectl stop

答案 9 :(得分:0)

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

想象一下,有一个容器的容器ID为8e35276e845e。您可以使用命令docker rm 8e35276e845edocker rm 8e3结束容器。请注意,前3个字符串是该特定docker容器ID的ID。因此,根据上述情况, 8e3 8e35276e845e 的ID。

  • 如果重新启动不起作用,您可以尝试更改 docker-compose.yml 文件中的服务端口,然后根据apache端口,您必须更改虚拟主机(如果有)。这将解决您的问题。

例如:

    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

并且特定的虚拟主机也必须更改,

Ex(根据上述情况):

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

这将帮助您解决上述问题。

答案 10 :(得分:0)

对于许多存在相同问题的Windows用户,我建议也重新启动计算机,因为在大多数情况下(至少对我而言),仅Docker无法启动。因此,我建议您按照以下步骤操作:

  1. 重新启动计算机。
  2. 然后以管理员身份启动PowerShell并运行此程序:

    Set-NetConnectionProfile -interfacealias“ vEthernet(DockerNAT)” -NetworkCategory Private

  3. 之后,重新启动Docker。

完成这些步骤后,您将可以毫无问题地运行。 希望对您有所帮助。