Docker 如何在不同的容器中使用相同的端口?

Docker 如何在不同的容器中使用相同的端口?,docker,docker-compose,ros,Docker,Docker Compose,Ros,我有两个docker容器,每个都运行roscore,它使用端口11311。每个容器都有单独的IP地址,在发布和订阅时使用不同的名称空间。难道我不能把每个容器当作一台单独的机器吗?我要做的是根据名称空间将pub从主机发送到其中一个容器 当我启动容器时,我得到以下信息: $ docker-compose up Creating mach1 ... error Creating mach1 ... ERROR: for mach1 Cannot start service mach1: driv

我有两个docker容器,每个都运行roscore,它使用端口11311。每个容器都有单独的IP地址,在发布和订阅时使用不同的名称空间。难道我不能把每个容器当作一台单独的机器吗?我要做的是根据名称空间将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.
docker compose的YAML是:

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

问题是您正试图将主机上两个容器的端口11311映射到11311

ports:
  - "11311:11311"
相反,请尝试映射到不同的主机端口:

ports:
  - "11311:11311"


问题是您正试图将主机上两个容器的端口11311映射到11311

ports:
  - "11311:11311"
相反,请尝试映射到不同的主机端口:

ports:
  - "11311:11311"


您可能认为他们可以为我们提供更好的错误信息:您可能认为他们可以为我们提供更好的错误信息: