डॉक-कंपोज़ के माध्यम से डॉकटर कंटेनरों को स्थिर आईपी प्रदान करें


96

मैं कंटेनरों को स्थिर आईपी पता प्रदान करने की कोशिश कर रहा हूं। मैं समझता हूं कि मुझे एक कस्टम नेटवर्क बनाना होगा। मैं इसे बनाता हूं और ब्रिज इंटरफेस होस्ट मशीन (Ubuntu 16.x) पर है। कंटेनरों को इस सबनेट से आईपी मिलता है लेकिन मेरे द्वारा दिए गए स्टेटिक को नहीं।

यहाँ मेरा 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 मिलता है।


ऑक्स-पता का उपयोग मैन्युअल रूप से आईपी-ड्राइवर को आईपी पते के बारे में सूचित करने के लिए किया जाता है जो पहले से ही नेटवर्क में उपयोग के लिए है
हमजा

जब मैंने सेवा को एक स्थिर आईपी आवंटित किया है, तो मैं 'docker कम्पोज़ अप -dalescale-name = 3' का उपयोग करके इन कंटेनरों में से किसी को कैसे स्केल कर सकता हूं?
यश

जवाबों:


124

ध्यान दें कि मैं डॉकटर में कंटेनरों के लिए एक निश्चित आईपी की सिफारिश नहीं करता हूं जब तक कि आप कुछ ऐसा नहीं कर रहे हैं जो आपके कंटेनर नेटवर्क के अंदर से बाहर से मार्ग की अनुमति देता है (जैसे मैकवलन)। 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

2
आपने कंपोज़ फ़ाइल के निचले आधे हिस्से को याद किया होगा, जहाँ उपयोगकर्ता कॉन्फ़िगर सबनेट परिभाषित किया गया था।
बिच

12
आप इसे संस्करण 3 में कैसे कर सकते हैं?
अटर_मैक्स

4
@Atr_Max फिलहाल, आप यह नहीं कर सकते हैं: "नोट: अतिरिक्त IPAM कॉन्फ़िगरेशन, जैसे गेटवे, इस समय केवल संस्करण 2 के लिए सम्मानित हैं।" docs.docker.com/compose/compose-file/#ipam
BMitch

2
@ रयान स्टेटिक आईपी सुरक्षा में सुधार नहीं करेगा, आपको अभी भी उसी कनेक्शन को खोलने की आवश्यकता है, और आपके कंटेनर अभी भी एक नामांकित नेटवर्क के अंदर चलेंगे, जहां आप केवल वही दिखाते हैं जो आपको चाहिए। स्टेटिक आईपी के लचीलेपन में कमी आएगी, जिसमें आपके एप्लिकेशन के रोलिंग अपडेट करने की क्षमता, झुंड मोड में काम न करना और पर्यावरण या इसी तरह के कंटेनरों के बीच कंटेनर के कॉन्फ़िगरेशन को कॉपी करना कठिन होगा। लिंक किए गए मुद्दे के लिए, आपको बस कंटेनर के अंदर 0.0.0.0 पर सुनना होगा।
BMitch

1
@alvery मेरा एक ही मुद्दा है, आपको उपयोग करने की आवश्यकता है --फोर्स-रीक्रिएट ऑप्शन क्योंकि डॉकटर-कम्पोज़ पहले से निर्मित नेटवर्क (शायद बग) पर
कॉन्फिगरेशन

22

मैं एक पर्यावरण चर के साथ कुछ कठिनाइयों का सामना कर रहा था जो कस्टम नाम (KAPACITOR_BASE_URL और KAPACITOR_ALERTS_ENDPOINT के लिए कंटेनर नाम / पोर्ट कन्वेंशन के साथ नहीं) के साथ है। यदि हम इस मामले में सेवा का नाम देते हैं तो यह आईपी को हल नहीं करेगा

KAPACITOR_BASE_URL:  http://kapacitor:9092

ऊपर में http://[**kapacitor**]:9092हल नहीं होगाhttp://172.20.0.2:9092

मैंने सबनेटिंग कॉन्फ़िगरेशन का उपयोग करके स्थिर आईपी मुद्दों को हल किया।

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:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.