브리지 네트워크에서 컨테이너의 IP를 가져오는 방법
나는 이와 같은 mariadb 클러스터를 배치하고 있습니다.
(host) $ cat docker-compose.yaml
version: '3.6'
services:
parent:
image: erkules/galera
command: ["--wsrep-cluster-name=local-test", "--wsrep-cluster-address=gcomm://"]
hostname: parent
child:
image: erkules/galera
command: ["--wsrep-cluster-name=local-test", "--wsrep-cluster-address=gcomm://parent"]
depends_on:
- parent
deploy:
replicas: 5
(host) $ sudo docker stack deploy --compose-file docker-compose.yaml mariadb
이제 저는 호스트 머신에서 db 서버에 접속을 시도할 수 있도록 브리지 네트워크 내의 컨테이너의 ips를 찾으려고 합니다.나는 이렇게 찾을 수 있습니다.
(host) $ docker exec $(docker ps -q | head -n 1) /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
176: eth0@if177: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
link/ether 02:42:0a:00:01:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.1.7/24 brd 10.0.1.255 scope global eth0
valid_lft forever preferred_lft forever
182: eth1@if183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:13:00:08 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet 172.19.0.8/16 brd 172.19.255.255 scope global eth1
valid_lft forever preferred_lft forever
(host) $ mysql -h 172.19.0.8 -u root
Welcome to the MariaDB monitor. ...
하지만 난 더러운 파싱을 좀 해야만 해요.그래서 도커가 제공하는 명령만으로 이것을 얻을 수 있는 우아한 방법이 있는지 궁금합니다.예를 들어, 오버레이 네트워크의 ips의 경우,inspect
명령을 받음json
산출량.
(host) $ docker ps -q | xargs docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Id }}'
10.0.1.7 c8e3dfc13c60c6925e55dff1c8dad5fb8e9bbb2335743671e45cd2f4d47fabab
10.0.1.8 7fbede8ffa63e007544c28efcc2ec2418ad44b2012e849489c25536a8408e9f6
10.0.1.6 fe0b7dcdd26fa3edecc025a5b6be0bfab04bce4d448587e5488e414dba595758
10.0.1.10 2fe03472255577db0b2d54f40422be15915121fedf3873d9e09082d5caad7f2f
10.0.1.9 0b34241582be3218d022cc58c95ce21a8be0c46dcd2ff7bca64a02a11427953a
10.0.1.4 5acc231db33b494a83010f0d6397b11365d14ca264f52bc477c642a9eda0be3f
Edit1: 배치 부품을 최대한 일반적으로 유지하고 싶습니다.포트를 게시하고 싶지 않습니다.그러면 컨테이너마다 다른 포트를 배정해야 합니다.
편집2: 보아하니, 다중 호스트 스웜 오버레이 네트워크의 경우, 도커는docker_gwbridge
인터페이스.그래서 할 수 있습니다.docker network inspect docker_gwbridge
각 컨테이너에 대한 ips를 얻을 수 있습니다.
일반적으로 composition을 사용할 때는 docker-composition.yml containers id, take.2...3... 등의 순서로 작성됩니다.
따라서 네트워크(docker create network...)를 만들어 보고 docker-compose.yml의 마지막 예를 들어 보십시오.
rabbitmq:
ports:
- "8201:8080"
volumes:
- /share:/share
container_name: rabbitmq-int1
hostname: rabbitmq-int1
cpu_shares: 10
mem_limit: 2000000000
networks:
compose_net:
ipv4_address: 172.12.0.3
networks:
compose_net:
external:
name: network_compose
여기서 "network_compose"는 호스트/서버에서 이전에 생성된 네트워크입니다(docker create network...).
이 명령은 네트워크 세부 정보, contain list containers join in network 및 해당 IP를 보여줍니다.이것이 도움이 되기를 바랍니다.
docker network ls // To get list network running -> get network id
docker network inspect network_id // Now you can get container IP
언급URL : https://stackoverflow.com/questions/52298848/how-to-get-containers-ip-on-bridge-network
'programing' 카테고리의 다른 글
운영 체제 컴파일 시간 (0) | 2023.10.28 |
---|---|
사용자 지정 쿼리로 가져온 wordpress의 post_content에서 모든 시각적 작곡가 숏코드/태그를 제거하는 방법 (0) | 2023.10.28 |
그럼 .는 왜 함수가 아닌가요? (0) | 2023.10.28 |
Mysql에서 Varchar를 텍스트로 마이그레이션 (0) | 2023.10.28 |
Gmail에서 메일 AJAX 요청 가로채기 (0) | 2023.10.28 |