简体   繁体   中英

Can docker-compose share an ip between services with discrete ports?

We currently have docker containers with complex builds using supervisord so that we can group services together. For example, nginx and ssh.

I'm attempting to rebuild these with more service-driven isolation linked by shared volumes. However, without mapping the IP to the host , I can't seem to find a way to allow IP addresses to be shared even though the ports may be discrete.

What I'm trying to do is something like this:

version: '2'
services:
  web:
    image: nginx
    volumes:
    - /data/web:/var/www
    networks:
      public:
        ipv4_address: 10.0.0.1
    ports:
    - "10.0.0.1:80:80"
  ssh:
    image: alpine-sshd
    volumes:
    - /data/web:/var/www
    networks:
      public:
        ipv4_address: 10.0.0.1
    ports:
    - "10.0.0.1:22:22"
networks:
  public:
    external: true

...where public is a predefined docker macvlan network.

When I try this, I get the error:

ERROR: for ssh  Cannot start service ssh: Address already in use

I'm aware that another solution to this is to introduce a third service to work as a proxy. However, I thought this would be a simple enough case not to need it.

Is it possible to configure docker-compose/docker-networking to route by the port to allow the same IP address to be used for different containers?

Is it possible to configure docker-compose/docker-networking to route by the port to allow the same IP address to be used for different containers?

Yes we can(familiar? -_-!). There is an option of network mode presented by Docker, called service:service-name .

When we execute docker run , we could add --network=service:service-name flag. It means that current container uses the same network namespace of service:service-name . More information reference here.

Try the following compose file below. I've tested it, which works well.

version: '2'
services:
  web:
    image: nginx
    networks:
      public:
        ipv4_address: 10.0.0.2
    ports:
      - "8880:80"
      - "2220:22"

  ssh:
    image: panubo/sshd
    network_mode: "service:web"
    depends_on:
      - web
networks:
  public:
    external: true

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM