도커 합성을 통해 도커 컨테이너에 정적 IP 제공
컨테이너에 정적 IP 주소를 제공하려고 합니다.사용자 지정 네트워크를 만들어야 한다는 것을 알고 있습니다.이를 생성하면 브리지 인터페이스가 호스트 시스템(Ubuntu 16.x)에서 작동합니다.컨테이너는 이 서브넷에서 IP를 가져오지만 제가 제공한 정적은 가져오지 않습니다.
다음은 제 도커 구성입니다.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
사용자 지정 이름(KAPACIOR_BASE_URL 및 KAPACIOR_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:
정적 IP 주소 집합이 표시되지 않는 경우 "도커 구성"을 사용하고 있기 때문일 수 있습니다."docker-compose up"을 사용해 보십시오.
"docker-compose up"(하이픈 포함)을 사용하면 할당된 정적 IP가 표시됩니다.
networks:
hfnet:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.55.0/24
gateway: 192.168.55.1
services:
web:
image: 'mycompany/webserver:latest'
hostname: www
domainname: mycompany.com
stdin_open: true # docker run -i
tty: true # docker run -t
networks:
hfnet:
ipv4_address: 192.168.55.10
ports:
- '80:80'
- '443:443'
volumes:
- '../honeyfund:/var/www/html'
저는 그것을 알아내느라 많은 시간을 낭비했습니다. :(
더 편리하고 의미 있는 방법은 컨테이너 이름을 붙이는 것이라는 것을 깨달았습니다.동일한 도커 네트워크에 있는 이름을 소스로 사용할 수 있습니다.도커 컨테이너에 변경된 IP가 있기 때문에 구성 파일에서 사용할 수 있는 정적 이름을 가진 다른 컨테이너와 통신할 수 있습니다.
도커의 정적 IP 주소는 특히 역방향 프록시 서버와 함께 사용할 때 매우 유용합니다.경험의 법칙은 첫 번째 도커 작성 파일(컨테이너)이 향후 컨테이너에서 사용할 네트워크 서브넷을 정의하는 것입니다.
간단한 사용 사례는 SSL 인증서를 컨테이너에 할당할 뿐만 아니라 트래픽을 컨테이너로 유도하는 프록시 관리자를 사용하는 경우입니다.출처:정적/고정 IP용 도커 합성(유튜브 비디오 열기)
언급URL : https://stackoverflow.com/questions/39493490/provide-static-ip-to-docker-containers-via-docker-compose
'programing' 카테고리의 다른 글
$a + + + $a가 == 2인 이유는 무엇입니까? (0) | 2023.08.24 |
---|---|
Angular2에서 원시 html을 바인딩하는 방법 (0) | 2023.08.24 |
도커 컴포지트와 도커 컴포지트 스타트의 차이점은 무엇입니까? (0) | 2023.08.24 |
배경색 전환 (0) | 2023.08.24 |
jquery html(jquery html) 스크립트 태그 제거 (0) | 2023.08.24 |