Как я могу запустить несколько экземпляров образа Docker? - PullRequest
0 голосов
/ 28 мая 2019

Я хочу, чтобы несколько экземпляров / реплик одного и того же изображения.

Рассмотрим изображение workerA, которое было построено.

docker build --tag=workerA .

Я обычно запускаю его с

docker run --net=host -p 18080:8080 -t -i workerA

Теперь я хочу запустить несколько копий этого Docker-контейнера. Я заглянул в документацию swarm и создал файл компоновки как

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

но они, похоже, не находятся в одной сети и не преформуют так, как я привык, когда работает один экземпляр докера.

1 Ответ

1 голос
/ 28 мая 2019

Из документов

Параметр network_mode игнорируется при развертывании стека в режиме роя с файлом составления (версия 3).

Если вы ожидаете, что он будет вести себя так же, как и при запуске одного контейнера, этого не произойдет.

Если для использования version: '3' нет особых причин, вы можете использовать version:'2'.

Или вы можете позволить ему создать свою собственную сеть, что он делает с вашим текущим файлом docker-compose.

Если вы хотите использовать вместо этого хост-сеть, обратите внимание на следующие ограничения ( из документов ):

В Docker 17.06 и выше вы также можете использовать сеть хоста для службы роя, передав --network host команде docker container create. В этом случае управляющий трафик (трафик, связанный с управлением роем и сервисом) все еще отправляется через оверлейную сеть, но отдельные контейнеры сервиса роя отправляют данные, используя хост-сеть и порты демона Docker. Это создает некоторые дополнительные ограничения. Например, если сервисный контейнер связывается с портом 80, только один сервисный контейнер может работать на данном узле роя.

...