webentwicklung-frage-antwort-db.com.de

Stellen Sie Docker-Containern über docker-compose statische IP-Adressen zur Verfügung

Ich versuche, Container mit einer statischen IP-Adresse zu versorgen. Ich verstehe, dass ich ein benutzerdefiniertes Netzwerk erstellen muss. Ich erstelle es und die Bridge-Schnittstelle ist auf dem Host-Rechner (Ubuntu 16.x). Die Container erhalten eine IP von diesem Subnetz, aber nicht die von mir bereitgestellte statische IP.

Hier ist meine 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

Die Container erhalten 10.5.0.2 und 10.5.0.3 anstelle von 5 und 6.

58
chenchuk

Beachten Sie, dass ich für Container in Docker keine feste IP-Adresse empfehle, es sei denn, Sie führen ein Routing von außen nach innen in Ihrem Containernetzwerk durch (z. B. macvlan). DNS ist bereits für die Serviceerkennung innerhalb des Containernetzwerks verfügbar und unterstützt die Containerskalierung. Außerhalb des Containernetzwerks sollten Sie exponierte Ports auf dem Host verwenden. Mit diesem Haftungsausschluss ist hier die gewünschte Compose-Datei:

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
87
BMitch

Ich hatte einige Probleme mit einer Umgebungsvariablen mit benutzerdefiniertem Namen (nicht mit der Containernamen-/Portkonvention für KAPACITOR_BASE_URL und KAPACITOR_ALERTS_ENDPOINT). Wenn wir in diesem Fall den Dienstnamen angeben, wird die IP nicht als aufgelöst

KAPACITOR_BASE_URL:  http://kapacitor:9092

Oben würde http://[**kapacitor**]:9092 Nicht zu http://172.20.0.2:9092 Aufgelöst.

Ich habe die statischen IP-Probleme mithilfe von Subnetzkonfigurationen behoben.

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://[email protected]
          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:
11
Jaswinder