Как использовать одни и те же порты в отдельных контейнерах?

У меня есть два контейнера докеров, каждый из которых работает с roscore, который использует порт 11311. Каждый из контейнеров имеет отдельный IP-адрес и использует разные пространства имен при публикации и подписке. Разве я не могу рассматривать каждый контейнер как отдельную машину? Что я хочу сделать, так это rostopic pub с хоста на один из контейнеров на основе пространства имен.

Когда я запускаю контейнеры, я получаю следующее:

$ docker-compose up
Creating mach1 ... error
Creating mach1 ... 

ERROR: for mach1  Cannot start service mach1: driver failed programming external
Creating mach2 ... done
cab7aa376623c708c): Bind for 0.0.0.0:11311 failed: port is already allocated

ERROR: for mach1  Cannot start service mach1: driver failed programming external connectivity on endpoint mach1 (9f755a1bd3f1dad40cce6963105a5d7224127dca3e0bb72cab7aa376623c708c): Bind for 0.0.0.0:11311 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

YAML для docker-compose:

version: '3'
services:
  mach1:
    build:
      context: .
      dockerfile: ./mach1/Dockerfile
    environment:
      - "ROS_IP=10.10.0.20"
      - "ROS_MASTER_URI=http://10.10.0.20:11311"
    image: my-image:v1
    ports:
      - "11311:11311"
    networks:
      my_net:
        ipv4_address: 10.10.0.20

  mach2:
    build:
      context: .
      dockerfile: ./mach2/Dockerfile
    environment:
      - "ROS_IP=10.10.0.21"
      - "ROS_MASTER_URI=http://10.10.0.21:11311"
    image: my-image:v1
    ports:
      - "11311:11311"
    networks:
      my_net:
        ipv4_address: 10.10.0.21

networks:
  my_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.10.0.0/24
        #- gateway: 10.10.0.1
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы пытаетесь сопоставить порты обоих контейнеров с 11311 по 11311 на хосте.

ports:
  - "11311:11311"

Вместо этого попробуйте сопоставить разные порты хоста:

ports:
  - "11311:11311"

а также

ports:
  - "11312:11311"

вы могли бы подумать, что они могли бы дать нам лучшее сообщение об ошибке для этого :)

Max Gasner 20.04.2019 02:35

Другие вопросы по теме