一尘不染

通过docker-compose为Docker容器提供静态IP

docker

我正在尝试为容器提供静态IP地址。我了解我必须创建一个自定义网络。我创建了它,并且桥接接口在主机(Ubuntu
16.x)上已启动。容器从该子网获取IP,但不是我提供的静态IP。

这是我的docker-compose.yml:

version: '2'

services:
  mysql:
    container_name: mysql
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
     - "3306:3306"
    networks:
     - vpcbr

  apigw-tomcat:
    container_name: apigw-tomcat
    build: tomcat/.
    ports:
     - "8080:8080"
     - "8009:8009"
    networks:
     - vpcbr
    depends_on:
     - mysql

networks:
  vpcbr:
    driver: bridge
    ipam:
     config:
       - subnet: 10.5.0.0/16
         gateway: 10.5.0.1
         aux_addresses:
          mysql: 10.5.0.5
          apigw-tomcat: 10.5.0.6

容器得到10.5.0.2和10.5.0.3,而不是5和6。


阅读 490

收藏
2020-06-17

共1个答案

一尘不染

请注意,除非您做的事情允许容器网络从外部路由到内部(例如,macvlan),否则我不建议在Docker中为容器使用固定IP。DNS已经在容器网络内部用于服务发现,并支持容器扩展。在容器网络外部,应使用主机上的裸露端口。有了免责声明,这是您想要的撰写​​文件:

version: '2'

services:
  mysql:
    container_name: mysql
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
     - "3306:3306"
    networks:
      vpcbr:
        ipv4_address: 10.5.0.5

  apigw-tomcat:
    container_name: apigw-tomcat
    build: tomcat/.
    ports:
     - "8080:8080"
     - "8009:8009"
    networks:
      vpcbr:
        ipv4_address: 10.5.0.6
    depends_on:
     - mysql

networks:
  vpcbr:
    driver: bridge
    ipam:
     config:
       - subnet: 10.5.0.0/16
         gateway: 10.5.0.1
2020-06-17