【问题标题】:How to resolve " driver failed programming external connectivity" in docker-compose?如何解决 docker-compose 中的“驱动程序编程外部连接失败”?
【发布时间】:2019-09-19 15:06:42
【问题描述】:

我正在使用 docker@19.03.2 build 6a30dfc) 和 docker-compose@1.19.0, build 9e633ef。

给定一个 docker-compose.yml(过去很长一段时间都可以正常工作,并且自 2019 年 4 月以来一直没有改变)文件,它只启动了一个 mariadb 容器,并且应该向主机公开 mysql 端口:

pe-db:
    image: mariadb:10.3
    ports:
        - 3306:3306
    environment:
        MYSQL_DATABASE: dev_db
        MYSQL_PASSWORD: password
        MYSQL_USER: dev
        MYSQL_ROOT_PASSWORD: root_password

在运行时:

 docker-compose up

我收到错误消息:

Recreating fcac8d931b6a_ratepipeline_pe-db_1 ... error

ERROR: for fcac8d931b6a_ratepipeline_pe-db_1  Cannot start service pe-db: driver failed programming external connectivity on endpoint ratepipeline_pe-db_1 (6e649313e4cccd484d0672183cd24daf21c5e8ad3dc1e01fda57d0c942194b6d): Bind for 0.0.0.0:3306 failed: port is already allocated

ERROR: for pe-db  Cannot start service pe-db: driver failed programming external connectivity on endpoint ratepipeline_pe-db_1 (6e649313e4cccd484d0672183cd24daf21c5e8ad3dc1e01fda57d0c942194b6d): Bind for 0.0.0.0:3306 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

当检查端口 3306 上运行的内容时:

sudo netstat -nlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      3042/docker-proxy

我看到了 docker-proxy。本地没有运行其他 mysql 数据库。我可以通过以下方式杀死docker-proxy

sudo killall docker-proxy
sudo netstat -nlp | grep 3306

然后我看到端口3306 上没有任何运行。然而docker-compose up 将再次遇到相同的错误,声称端口已在使用中,即使netstat 将显示该端口上没有用户。

我还尝试通过

重新启动 docker 守护进程
 sudo service docker restart

并重新启动我的系统。问题依然存在。

我该如何解决这个问题?

【问题讨论】:

    标签: docker ubuntu docker-compose


    【解决方案1】:

    在我的例子中,我确实运行了一个 mysql 容器。它不会显示在 netstat 上,但我可以通过

    看到它
    docker ps
    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
    
    b59b7973d88b        mysql:5.7                   "docker-entrypoint.s…"   10 days ago         Up 8 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp                                        squbsstub_db_1
    

    然后我可以通过它的CONTAINER ID 杀死那个容器,在这种情况下:

    docker kill b59b7973d88b
    

    然后我以前的 docker-compose 项目会正常运行。

    【讨论】:

    • 我没有运行任何容器!有什么想法吗?
    • @PetarVasilev 远射:也许你安装了两次 docker,一次是 snap,一次是官方方式?或者你可能有一个本地 mysql 服务器已经在监听端口?除此之外,我不知道,你最好在链接到这个问题时问一个后续问题。
    • 这是因为 MySQL 在该端口上运行。停止它并开始工作。
    猜你喜欢
    • 2021-06-27
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2018-09-21
    • 2012-11-15
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多