2016-09-14 53 views
22

我試圖向容器提供靜態IP地址。我知道我必須創建一個自定義網絡。我創建它並且橋接器在主機上運行(Ubuntu 16.x)。容器從該子網獲得IP,但不是我提供的靜態IP。通過docker-compose向Docker容器提供靜態IP

這裏是我的搬運工,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

回答

40

請注意,我不建議固定除非你正在做一些允許從外部到你的容器網絡內部的路由(例如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 
+1

作品作爲一個魅力!謝謝。 – chenchuk

+1

不適用於我: 僅當連接到具有用戶配置的子網的網絡時才支持用戶指定的IP地址 –

+0

您必須錯過定義了用戶配置的子網的撰寫文件的下半部分。 – BMitch