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

Docker on Windows 10 “driver failed programming external connectivity on endpoint”

我正在尝试为项目使用$ docker-compose up -d,并收到以下错误消息:

ERROR: for api Cannot start service api: driver failed programming external connectivity on endpoint dataexploration_api_1 (8781c95937a0a4b0b8da233376f71d2fc135f46aad011401c019eb3d14a0b117): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:9000:tcp:172.19.0.2:80: input/output error
Encountered errors while bringing up the project.

我想知道是否是港口? 我以前曾尝试使用8080端口。 该项目最初是在Mac上设置的,我已经从gitHub克隆了存储库。


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

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


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

在这种情况下,请禁用快速启动,否则您可能会在每次计算机启动时重新启动Docker。此解决方案是从这里获得的


只是重新命名Docker并不能在Windows 10上解决我的问题。

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

1)关闭" Docker Desktop"

2)运行以下命令:

1
2
net stop com.docker.service
net start com.docker.service

3)再次启动" Docker Desktop"

希望这会帮助别人。


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

1
docker container ls

您得到类似于以下内容:

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

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

现在,您必须结束该过程(并运行其他图像),然后运行此命令。

1
docker container stop <CONTAINER_ID>

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

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


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

对我来说解决方案是:

  • 以管理员身份打开Windows CMD,输入netstat -oan来查找占用您端口的进程(Docker是该进程):
  • >
</p>
<p>
在我的情况下,我的docker端口是3306 6001 8000 9001。
</p>
<li>
<p>
现在我们需要释放该端口,因此我们要使用PID(列PID)终止该进程,请键入
</p>
<div class=

    1
    TASKKILL /PID 9816 /F
  • 重新启动docker。

  • 要开心。
  • 问候。


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

    enter image description here


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


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


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

  • 重新启动电脑。
  • 然后以管理员身份启动PowerShell并运行以下命令:

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

  • 之后,重新启动您的Docker。

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


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

    假设有一个容器的容器ID为8e35276e845e,可以使用命令docker rm 8e35276e845edocker rm 8e3结束该容器,请注意前3个字符串是该特定Docker容器ID的ID。因此,根据上述场景8e3是8e35276e845e的ID。

    • 如果重启不起作用,您可以尝试更改docker-compose.yml文件中的服务端口,然后根据apache端口必须更改v-host的端口(如果有的话)。问题。

    例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        build:
          context: ./apache
          dockerfile: Dockerfile
        working_dir: /var/www/
        volumes:
          - .:/var/www
        networks:
          - app-network
        ports:
          - 8082:80
        depends_on:
          - mysql_db

    应该变成

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apache_server:
        build:
          context: ./apache
          dockerfile: Dockerfile
        working_dir: /var/www/
        volumes:
          - .:/var/www
        networks:
          - app-network
        ports:
          - 8083:80
        depends_on:
          - mysql_db

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

    例(根据以上情况):

    1
    2
    3
    4
    5
    6
    <VirtualHost *:80>
        ProxyPreserveHost On
        ServerAlias phpadocker.lk
        ProxyPass / http://localhost:8083/
        ProxyPassReverse / http://localhost:8083/
    </VirtualHost>

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


    答案有点晚了,但我会留在这里,这可能会对其他人有所帮助
    在Mac和docker大量重启后的Mac mojave上
    我必须sudo apachectl stop