Docker Compose 无法将容器添加到网络
Docker Compose Fails To Add Container to Network
我有一个非常简单的 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"
由于撰写文件或其构建的 Dockerfile
在上周或该命令的 运行 之间没有任何变化,我无法解释为什么撰写有时会正确创建网络而不是其他人。
我自己在 Windows 上使用 docker-compose 和我的一些同事在 Mac 上看到了同样的行为。
更新:
如果我 运行 docker ps (dps 是一个客户 powershell 函数,我有 returns docker ps 输出为 powershell 对象而不是 table 字符串)在失败期间足够多次 运行 我得到奇怪的行为,其中服务器图像 运行 首先是一个监听器,然后是 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
的问题。
该脚本将执行然后立即崩溃。当它崩溃时,由于某种原因,它会从网络中删除。
当项目开始使用更可靠的脚本来启动网络服务器时,这个问题就消失了。
我有一个非常简单的 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"
由于撰写文件或其构建的 Dockerfile
在上周或该命令的 运行 之间没有任何变化,我无法解释为什么撰写有时会正确创建网络而不是其他人。
我自己在 Windows 上使用 docker-compose 和我的一些同事在 Mac 上看到了同样的行为。
更新:
如果我 运行 docker ps (dps 是一个客户 powershell 函数,我有 returns docker ps 输出为 powershell 对象而不是 table 字符串)在失败期间足够多次 运行 我得到奇怪的行为,其中服务器图像 运行 首先是一个监听器,然后是 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
的问题。
该脚本将执行然后立即崩溃。当它崩溃时,由于某种原因,它会从网络中删除。
当项目开始使用更可靠的脚本来启动网络服务器时,这个问题就消失了。