Docker Compose无法将容器添加到网络

Docker Compose无法将容器添加到网络,docker,docker-compose,docker-networking,Docker,Docker Compose,Docker Networking,我有一个非常简单的docker-compose.yml文件: version: '3' services: server: build : . ports: - "4567:4567" environment: - ENDPOINT_PORT=4567 ssh: build: context: . dockerfile:

我有一个非常简单的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将无法向compose网络添加
project\u name\u server\u 1
,也无法在主机上创建其侦听器

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文件或它构建的
Dockerfile
s在上周或在运行该命令之间没有任何更改,因此我无法解释为什么compose有时会正确创建网络而不是其他网络

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

更新:

如果我在失败的运行期间运行docker ps(dps是一个客户powershell函数,它以powershell对象而不是表字符串的形式返回docker ps输出)足够多的时间,我会得到奇怪的行为,其中服务器映像首先使用侦听器运行,然后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"

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

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


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

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