Menyediakan IP statis ke container buruh pelabuhan melalui docker-compose

95

Saya mencoba memberikan alamat IP statis ke container. Saya memahami bahwa saya harus membuat jaringan khusus. Saya membuatnya dan antarmuka jembatan di mesin host (Ubuntu 16.x). Kontainer mendapatkan IP dari subnet ini tetapi bukan statis yang saya berikan.

Berikut adalah docker-compose.yml saya:

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

Kontainer mendapatkan 10.5.0.2 dan 10.5.0.3, bukan 5 dan 6.

chenchuk
sumber
aux-address digunakan untuk menginformasikan ipam-driver secara manual tentang alamat IP yang sudah digunakan di jaringan
Hamza
Bagaimana cara meningkatkan skala salah satu kontainer ini menggunakan 'docker compose up -d --scale container-name = 3' ketika saya telah mengalokasikan ip statis ke layanan?
yash

Jawaban:

121

Perhatikan bahwa saya tidak merekomendasikan IP tetap untuk kontainer di Docker kecuali Anda melakukan sesuatu yang memungkinkan perutean dari luar ke dalam jaringan kontainer Anda (misalnya macvlan). DNS sudah ada untuk penemuan layanan di dalam jaringan kontainer dan mendukung penskalaan kontainer. Dan di luar jaringan kontainer, Anda harus menggunakan port yang terbuka pada host. Dengan penafian itu, inilah file tulis yang Anda inginkan:

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
BMitch
sumber
2
Anda pasti melewatkan setengah bagian bawah file compose di mana subnet yang dikonfigurasi pengguna telah ditentukan.
BMitch
11
Bagaimana Anda bisa melakukannya di versi 3?
Atr_Max
4
@Atr_Max Saat ini, Anda tidak dapat: "Catatan: Konfigurasi IPAM tambahan, seperti gateway, hanya diterapkan untuk versi 2 saat ini." docs.docker.com/compose/compose-file/#ipam
BMitch
2
@Ryan Static IP tidak akan meningkatkan keamanan, Anda masih perlu membuka koneksi yang sama, dan kontainer Anda akan tetap berjalan di dalam jaringan namespace di mana Anda hanya mengekspos apa yang Anda butuhkan. IP Statis akan mengurangi fleksibilitas, termasuk kemampuan untuk melakukan pembaruan berkelanjutan pada aplikasi Anda, tidak bekerja dalam mode swarm, dan membuat konfigurasi penampung lebih sulit untuk disalin antara lingkungan atau wadah serupa. Untuk masalah terkait, Anda hanya perlu mendengarkan 0.0.0.0 di dalam penampung.
BMitch
1
@alvery Saya memiliki masalah yang sama, Anda perlu menggunakan opsi --force-rekreate karena docker-compose tidak menerapkan konfigurasi pada jaringan yang sudah dibuat (mungkin bug)
HugoPoi
21

Saya menghadapi beberapa kesulitan dengan variabel lingkungan dengan nama khusus (bukan dengan nama penampung / konvensi port untuk KAPACITOR_BASE_URL dan KAPACITOR_ALERTS_ENDPOINT). Jika kami memberikan nama layanan dalam hal ini itu tidak akan menyelesaikan ip sebagai

KAPACITOR_BASE_URL:  http://kapacitor:9092

Di atas http://[**kapacitor**]:9092tidak akan memutuskan untukhttp://172.20.0.2:9092

Saya menyelesaikan masalah IP statis menggunakan konfigurasi subnetting.

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:
Jaswinder
sumber