J'essaie de fournir une adresse IP statique aux conteneurs. Je comprends que je dois créer un réseau personnalisé. Je le crée et l'interface de pont est en place sur la machine hôte (Ubuntu 16.x). Les conteneurs obtiennent une adresse IP de ce sous-réseau, mais pas la statique que j'ai fournie.
Voici mon 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
Les conteneurs reçoivent 10.5.0.2 et 10.5.0.3 au lieu de 5 et 6.
Notez que je ne recommande pas une adresse IP fixe pour les conteneurs dans Docker, sauf si vous faites quelque chose qui permet le routage de l'extérieur vers l'intérieur de votre réseau de conteneurs (par exemple, macvlan). DNS est déjà présent pour la découverte de services à l'intérieur du réseau de conteneurs et prend en charge la mise à l'échelle des conteneurs. Et en dehors du réseau de conteneurs, vous devez utiliser les ports exposés sur l'hôte. Avec cet avertissement, voici le fichier de composition que vous voulez:
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
Je rencontrais des difficultés avec une variable d'environnement avec un nom personnalisé (pas avec la convention de nom de conteneur/port pour KAPACITOR_BASE_URL et KAPACITOR_ALERTS_ENDPOINT). Si nous donnons le nom du service dans ce cas, cela ne résoudrait pas l’ip comme
KAPACITOR_BASE_URL: http://kapacitor:9092
En haut, http://[**kapacitor**]:9092
ne résoudrait pas en http://172.20.0.2:9092
J'ai résolu les problèmes d'adresse IP statique à l'aide de configurations de sous-réseaux.
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: