【问题标题】:Docker Compose Fails To Add Container to NetworkDocker Compose 无法将容器添加到网络
【发布时间】:2020-04-04 22:07:02
【问题描述】:

我有一个非常简单的 docker-compose.yml 文件:

version: '3'
services:
    server:
        build : .
        ports:
            - "4567:4567"
        environment:
            - ENDPOINT_PORT=4567
    ssh:
        build:
            context: .
            dockerfile: Dockerfile-ssh-service
        ports:
          - 22
        depends_on:
          - server

直到上周,这将可靠地为我的项目创建一个包含 ssh 容器的网络和一个已构建的容器,该容器相互公开正确的端口以及主机上的正确端口绑定:

docker-compose --project-name project_name up --build -d --scale ssh=3

Names                 Ports                  Command
-----                 -----                  -------
project_name_ssh_3    0.0.0.0:32774->22/tcp  "/usr/sbin/sshd -D"
project_name_ssh_1    0.0.0.0:32775->22/tcp  "/usr/sbin/sshd -D"
project_name_ssh_2    0.0.0.0:32776->22/tcp  "/usr/sbin/sshd -D"
project_name_server_1 0.0.0.0:4567->4567/tcp "bundle exec scripts/boot.rb"

不幸的是,大约在上周,运行此命令的成功率已降至 50% 或更少。对于现在使用上述命令的大多数尝试,compose 将无法将 project_name_server_1 添加到 compose 网络,并且无法在主机上创建其侦听器。

Names                 Ports                 Command
-----                 -----                 -------
project_name_ssh_2    0.0.0.0:32800->22/tcp "/usr/sbin/sshd -D"
project_name_ssh_3    0.0.0.0:32799->22/tcp "/usr/sbin/sshd -D"
project_name_ssh_1    0.0.0.0:32798->22/tcp "/usr/sbin/sshd -D"
project_name_server_1                       "bundle exec scripts/boot.rb"

由于 compose 文件或其构建的 Dockerfiles 在上周或在运行该命令之间没有发生任何变化,我无法解释为什么 compose 有时会正确创建网络而不是其他网络.

我自己在 Windows 上使用 docker-compose 和我的一些同事在 Mac 上看到了同样的行为。

更新:

如果我运行 docker ps(dps 是一个客户 powershell 函数,我有它返回 docker ps 输出作为 powershell 对象而不是表字符串)在失败的运行期间我得到了奇怪的行为,其中服务器映像首先使用侦听器运行,然后 docker 删除监听器并创建其他容器,添加它们的监听器并从服务器容器中删除监听器,然后再也不用费心将监听器重新添加到服务器。

dps | ft names, ports, command

Names                 Ports Command
-----                 ----- -------
project_name_server_1       "bundle exec scripts/boot.rb"

dps | ft names, ports, command

Names                 Ports                  Command
-----                 -----                  -------
project_name_ssh_2                           "/usr/sbin/sshd -D"
project_name_ssh_3                           "/usr/sbin/sshd -D"
project_name_ssh_1                           "/usr/sbin/sshd -D"
project_name_server_1 0.0.0.0:4567->4567/tcp "bundle exec scripts/boot.rb"

dps | ft names, ports, command

Names                 Ports Command
-----                 ----- -------
project_name_ssh_2          "/usr/sbin/sshd -D"
project_name_ssh_3          "/usr/sbin/sshd -D"
project_name_ssh_1          "/usr/sbin/sshd -D"
project_name_server_1       "bundle exec scripts/boot.rb"

dps | ft names, ports, command

Names                 Ports                 Command
-----                 -----                 -------
project_name_ssh_2    0.0.0.0:32867->22/tcp "/usr/sbin/sshd -D"
project_name_ssh_3    0.0.0.0:32869->22/tcp "/usr/sbin/sshd -D"
project_name_ssh_1    0.0.0.0:32868->22/tcp "/usr/sbin/sshd -D"
project_name_server_1                       "bundle exec scripts/boot.rb"

【问题讨论】:

  • 您是否尝试使用 'docker network prune' 删除未使用的网络
  • @leachim742 我做到了,但这不是问题所在。我发现了我将在下面评论的问题。

标签: docker docker-compose docker-networking


【解决方案1】:

问题原来是代码scripts/boot.rb的问题。

该脚本将执行,然后立即崩溃。当它崩溃时,由于某种原因,它会从网络中删除。

当项目开始使用更可靠的脚本来启动 Web 服务器时,这个问题就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多