컨테이너에 고정 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: