如何运行Docker映像的多个实例?

时间:2019-05-28 16:11:00

标签: docker docker-swarm

我要同一张图像的多个实例/副本。

考虑已构建的映像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实例时所习惯的那样执行。

1 个答案:

答案 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节点上只能运行一个服务容器。