如何在 Docker Compose 中为复制的容器配置端口映射?
How to configure port mapping for replicated containers in Docker Compose?
目标是 运行 两个容器 publisher-app
。我应该将一个容器映射到主机上的端口 8080,另一个容器映射到 8081。这是 docker-compose
:
publisher_app:
ports:
- "8080-8081:8080"
environment:
server.port: 8080
deploy:
mode: replicated
replicas: 2
创建了两个容器,但据我了解,两个端口都分配给了第一个,第二个产生了这个错误:Ports are not available: listen tcp 0.0.0.0:8081: bind: address already in use
.
这是 docker ps -a
的输出:
6c7067b4ebee spring-boot-rest-kafka_publisher_app "java -jar /app.jar" 33 seconds ago Up 28 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:8081->8080/tcp spring-boot-rest-kafka_publisher_app_2
70828ba8f370 spring-boot-rest-kafka_publisher_app "java -jar /app.jar" 33 seconds ago Created spring-boot-rest-kafka_publisher_app_1
Docker引擎版本:20.10.11
Docker 编译版本:2.2.1
如何处理这种情况?非常感谢您的帮助。
这里是源代码:https://github.com/aleksei17/springboot-rest-kafka-mysql/blob/master/docker-compose.yml
在本地尝试过,但在 v2 和禁用 v2 的情况下都同样失败了。
在 arch 上尝试时:amd64
基于 fedora 的 linux 发行版,安装了包管理器 docker 并手动安装 docker-compose 1.29.2
(using the official guide for linux) 有效:
撰写文件:
version : "3"
services:
web:
image: "nginx:latest"
ports:
- "8000-8020:80"
docker 命令:
docker-compose up --scale web=5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b304d397b2cd nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 0.0.0.0:8004->80/tcp, :::8004->80/tcp testdir_web_4
a8c6f177a6e6 nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 0.0.0.0:8003->80/tcp, :::8003->80/tcp testdir_web_3
b1abe53e7d7d nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 8 seconds 0.0.0.0:8002->80/tcp, :::8002->80/tcp testdir_web_2
ead91e9df671 nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 9 seconds 0.0.0.0:8001->80/tcp, :::8001->80/tcp testdir_web_5
65ffd6a87715 nginx:latest "/docker-entrypoint.…" 24 seconds ago Up 21 seconds 0.0.0.0:8000->80/tcp, :::8000->80/tcp testdir_web_1
目标是 运行 两个容器 publisher-app
。我应该将一个容器映射到主机上的端口 8080,另一个容器映射到 8081。这是 docker-compose
:
publisher_app:
ports:
- "8080-8081:8080"
environment:
server.port: 8080
deploy:
mode: replicated
replicas: 2
创建了两个容器,但据我了解,两个端口都分配给了第一个,第二个产生了这个错误:Ports are not available: listen tcp 0.0.0.0:8081: bind: address already in use
.
这是 docker ps -a
的输出:
6c7067b4ebee spring-boot-rest-kafka_publisher_app "java -jar /app.jar" 33 seconds ago Up 28 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:8081->8080/tcp spring-boot-rest-kafka_publisher_app_2
70828ba8f370 spring-boot-rest-kafka_publisher_app "java -jar /app.jar" 33 seconds ago Created spring-boot-rest-kafka_publisher_app_1
Docker引擎版本:20.10.11
Docker 编译版本:2.2.1
如何处理这种情况?非常感谢您的帮助。
这里是源代码:https://github.com/aleksei17/springboot-rest-kafka-mysql/blob/master/docker-compose.yml
在本地尝试过,但在 v2 和禁用 v2 的情况下都同样失败了。
在 arch 上尝试时:amd64
基于 fedora 的 linux 发行版,安装了包管理器 docker 并手动安装 docker-compose 1.29.2
(using the official guide for linux) 有效:
撰写文件:
version : "3"
services:
web:
image: "nginx:latest"
ports:
- "8000-8020:80"
docker 命令:
docker-compose up --scale web=5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b304d397b2cd nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 0.0.0.0:8004->80/tcp, :::8004->80/tcp testdir_web_4
a8c6f177a6e6 nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 0.0.0.0:8003->80/tcp, :::8003->80/tcp testdir_web_3
b1abe53e7d7d nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 8 seconds 0.0.0.0:8002->80/tcp, :::8002->80/tcp testdir_web_2
ead91e9df671 nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 9 seconds 0.0.0.0:8001->80/tcp, :::8001->80/tcp testdir_web_5
65ffd6a87715 nginx:latest "/docker-entrypoint.…" 24 seconds ago Up 21 seconds 0.0.0.0:8000->80/tcp, :::8000->80/tcp testdir_web_1