반응형
docker-compose를 통해 Docker 컨테이너에 고정 IP 제공
컨테이너에 고정 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:
반응형
'ProgramingTip' 카테고리의 다른 글
fetch (key) 오류 : 지연로드 데이터베이스 (0) | 2020.12.08 |
---|---|
"예외를 사용하지 않는"캠프에있는 경우 표준 라이브러리를 어떻게 사용합니까? (0) | 2020.12.08 |
준비된 명령문에서 자동 증가 ID를 검색하는 방법이 있습니까? (0) | 2020.12.08 |
HTML 페이지의 디렉토리 선택기 (0) | 2020.12.08 |
.jar 및 .dll 파일의 차이점 (0) | 2020.12.08 |