我要同一张图像的多个实例/副本。
考虑已构建的映像workerA
。
docker build --tag=workerA .
我通常使用
docker run --net=host -p 18080:8080 -t -i workerA
现在我要运行该Docker容器的多个副本。我查看了swarm documentation并创建了一个
组成文件version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: workerA:latest
deploy:
replicas: 2
resources:
limits:
cpus: "0.5"
memory: 4G
restart_policy:
condition: on-failure
ports:
- "18080:8080"
network_mode: "host"
通常,工作人员将连接到主机服务器,获取数据并执行任务,但是服务器永远不会收到任何请求。如何检查workerA
终端的输出?我似乎能够创建副本
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
y0sf30vqaoj1 warokerASwarm_web replicated 2/2 workerA:latest *:18080->8080/tcp
,但它们似乎不在同一网络中,也不像我在运行单个docker实例时所习惯的那样执行。
答案 0 :(得分:0)
从docs
以群集模式(版本3)组成文件以群集模式部署堆栈时,将忽略选项 network_mode 。
如果您希望它的行为方式与运行单个容器时相同,则不会发生。
如果没有特定原因使用version: '3'
,则可以改用version:'2'
。
或者您可以让它创建自己的网络,该网络将与您当前的docker-compose文件一起使用。
如果您想改用主机网络,请注意以下限制(from docs):
在Docker 17.06及更高版本中,您还可以通过将--network host传递给docker container create命令来将主机网络用于集群服务。在这种情况下,控制流量(与管理群集和服务有关的流量)仍会通过覆盖网络发送,但是单个群集服务容器会使用Docker守护程序的主机网络和端口发送数据。这带来了一些额外的限制。例如,如果一个服务容器绑定到端口80,则在给定的swarm节点上只能运行一个服务容器。