[docker] docker-compose를 통해 Docker 컨테이너에 고정 IP 제공

컨테이너에 고정 IP 주소를 제공하려고합니다. 사용자 지정 네트워크를 만들어야한다는 것을 이해합니다. 그것을 만들고 브리지 인터페이스가 호스트 컴퓨터 (Ubuntu 16.x)에 있습니다. 컨테이너는이 서브넷에서 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

컨테이너는 5와 6 대신 10.5.0.2 및 10.5.0.3을 얻습니다.



답변

컨테이너 네트워크 (예 : 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


답변

사용자 지정 이름 (KAPACITOR_BASE_URL 및 KAPACITOR_ALERTS_ENDPOINT에 대한 컨테이너 이름 / 포트 규칙이 아님)을 사용하는 환경 변수로 인해 몇 가지 어려움에 직면했습니다. 이 경우 서비스 이름을 제공하면 IP를 다음과 같이 해석하지 않습니다.

KAPACITOR_BASE_URL:  http://kapacitor:9092

위의 http://[**kapacitor**]:9092해결되지 않습니다http://172.20.0.2:9092

서브넷 구성을 사용하여 고정 IP 문제를 해결했습니다.

version: "3.3"

networks:
  frontend:
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
    db:
        image: postgres:9.4.4
        networks:
            frontend:
                ipv4_address: 172.20.0.5
        ports:
            - "5432:5432"
        volumes:
            - postgres_data:/var/lib/postgresql/data

    redis:
        image: redis:latest
        networks:
            frontend:
                ipv4_address: 172.20.0.6
        ports:
            - "6379"

    influxdb:
        image: influxdb:latest
        ports:
            - "8086:8086"
            - "8083:8083"
        volumes:
            - ../influxdb/influxdb.conf:/etc/influxdb/influxdb.conf
            - ../influxdb/inxdb:/var/lib/influxdb
        networks:
            frontend:
                ipv4_address: 172.20.0.4
        environment:
          INFLUXDB_HTTP_AUTH_ENABLED: "false"
          INFLUXDB_ADMIN_ENABLED: "true"
          INFLUXDB_USERNAME: "db_username"
          INFLUXDB_PASSWORD: "12345678"
          INFLUXDB_DB: db_customers

    kapacitor:
        image: kapacitor:latest
        ports:
            - "9092:9092"
        networks:
            frontend:
                ipv4_address: 172.20.0.2
        depends_on:
            - influxdb
        volumes:
            - ../kapacitor/kapacitor.conf:/etc/kapacitor/kapacitor.conf
            - ../kapacitor/kapdb:/var/lib/kapacitor
        environment:
          KAPACITOR_INFLUXDB_0_URLS_0: http://influxdb:8086

    web:
        build: .
        environment:
          RAILS_ENV: $RAILS_ENV
        command: bundle exec rails s -b 0.0.0.0
        ports:
            - "3000:3000"
        networks:
            frontend:
                ipv4_address: 172.20.0.3
        links:
            - db
            - kapacitor
        depends_on:
            - db
        volumes:
            - .:/var/app/current
        environment:
          DATABASE_URL: postgres://postgres@db
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: postgres
          INFLUX_URL: http://influxdb:8086
          INFLUX_USER: db_username
          INFLUX_PWD: 12345678
          KAPACITOR_BASE_URL:  http://172.20.0.2:9092
          KAPACITOR_ALERTS_ENDPOINT: http://172.20.0.3:3000

volumes:
  postgres_data:


답변