도커 컨테이너에 정적 IP 할당
도커 컨테이너를 시작할 때 정적 IP 172.17.0.1을 할당하려고 합니다.
나는 이 컨테이너의 SSH 포트로 포트 2122를 사용하여 이 컨테이너가 포트 2122를 수신하도록 합니다.
sudo docker run -i -t -p 2122:2122 ubuntu
이 명령은 172.17.0.5와 같은 임의 IP를 사용하여 Docker 컨테이너를 실행하지만 컨테이너에 특정 IP를 할당해야 합니다.
다음 셸 스크립트는 고급 네트워크 설정에서 Docker 설명서를 참조하는 것입니다.
pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1
이 셸 스크립트는 정적 IP 172.17.0.1을 할당하고 월드에 연결합니다.하지만 로컬에서 이 컨테이너로 ssh를 시도할 때마다 작동하지 않았습니다.제가 만난 문제는 무엇일까요?
Docker 버전 1.10.1로 쉽게 9e83765를 구축할 수 있습니다.
먼저 독자적인 도커 네트워크(mynet123)를 만들어야 합니다.
docker network create --subnet=172.18.0.0/16 mynet123
그런 다음 이미지를 실행합니다(우분투를 예로 들겠습니다).
docker run --net mynet123 --ip 172.18.0.22 -it ubuntu bash
그리고 우분투 쉘에서.
ip addr
추가로 사용할 수 있습니다.
--hostname
호스트 이름을 지정하다--add-host
/etc/messages에 항목을 더 추가합니다.
https://docs.docker.com/engine/reference/commandline/network_create/ 의 문서(및 네트워크를 만들어야 하는 이유)
위해서docker-compose
다음을 사용할 수 있습니다.docker-compose.yml
version: '2'
services:
nginx:
image: nginx
container_name: nginx-container
networks:
static-network:
ipv4_address: 172.20.128.2
networks:
static-network:
ipam:
config:
- subnet: 172.20.0.0/16
#docker-compose v3+ do not use ip_range
ip_range: 172.28.5.0/24
호스트에서 다음을 사용하여 테스트할 수 있습니다.
docker-compose up -d
curl 172.20.128.2
현대의docker-compose
IP 주소를 자주 변경하지 않습니다.
에 있는 모든 컨테이너의 IP를 찾으려면 다음과 같이 하십시오.docker-compose
한 줄로 사용:
for s in `docker-compose ps -q`; do echo ip of `docker inspect -f "{{.Name}}" $s` is `docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $s`; done
자동화하려면 다음과 같은 예제 요지를 사용할 수 있습니다.
직접적인 대답은 아니지만 도움이 될 수 있습니다.
다음 접근 방식을 사용하여 대부분의 도킹된 서비스를 자체 정적 IP와 연결하여 실행합니다.
- 도커 호스트의 모든 서비스에 대한 IP 별칭을 생성합니다.
- 그런 다음 이 IP에서 컨테이너로 포트를 리디렉션하는 각 서비스를 실행하여 각 서비스가 외부 사용자와 다른 컨테이너에서 사용할 수 있는 정적 IP를 가집니다.
샘플:
docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror
...
퍼블릭 IP를 인식해야 제대로 작동하는 Avahi를 도킹하려다가 이 문제를 발견했습니다.Docker에서 정적 IP 할당을 지원하지 않기 때문에 정적 IP를 컨테이너에 할당하기가 어렵습니다.
이 문서에서는 Debian의 컨테이너에 정적 IP를 할당하는 방법에 대해 설명합니다.
도커 서비스는 다음으로 시작해야 합니다.
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
아마br0
브리지가 이미 구성되었습니다.컨테이너는 다음으로 시작해야 합니다.
--cap-add=NET_ADMIN --net=bridge
용기 【例컨】
pre-up ip addr flush dev eth0
/etc/network/interfaces
다음 예와 같이 Docker에서 할당한 IP 주소를 해제하는 데 사용할 수 있습니다.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
pre-up ip addr flush dev eth0
address 192.168.0.249
netmask 255.255.255.0
gateway 192.168.0.1
- Container의는 컨이너항스크다는시음합로니작다로 .
/etc/init.d/networking start
▁or▁needs▁▁populate▁also를 편집하거나 채워야 합니다./etc/hosts
Docker가 할당한 IP에 대한 참조를 제거하기 위한 파일입니다.
이것은 나에게 효과가 있습니다.
다음을 사용하여 네트워크 생성docker network create --subnet=172.17.0.0/16 selnet
실행docker run --net selnet --ip 172.18.0.2 hub
처음에 저는.
docker: Error response from daemon: Invalid address 172.17.0.2: It does not belong to any of this network's subnets.
ERRO[0000] error waiting for container: context canceled
솔루션:IP의 두 번째 4배 증가 [.17 대신 .18.]
IP를 실행하는 동안 IP를 설정할 수 있습니다.
docker run --cap-add=NET_ADMIN -dit imagename /bin/sh -c "/sbin/ip addr add 172.17.0.12 dev eth0; bash"
https://github.com/RvdGijp/mariadb-10.1-galera 에서 예를 참조
하실 수 . (으)ㄹ 수 있습니다.ping apache
또는 ip ip를 가져옵니다.curl http://apache
access service)ip.http의 이 될 수 .
컨테이너에 자체 가상 이더넷 소켓(자체 MAC 주소 포함)이 있고 iptablan을 사용하려면 Macvlan 드라이버를 사용합니다.트래픽을/ISP 라우터로 라우팅하려면 이 작업이 필요할 수 있습니다.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
언급URL : https://stackoverflow.com/questions/27937185/assign-static-ip-to-docker-container
'IT' 카테고리의 다른 글
npm 구성을 기본값으로 복원/재설정하는 방법은 무엇입니까? (0) | 2023.09.05 |
---|---|
마리아를 사용하여 카트 1.5.6.4 열기DB (0) | 2023.09.05 |
layout_weight 속성을 코드에서 동적으로 설정하는 방법은 무엇입니까? (0) | 2023.09.05 |
*내 것이 아닌*요구를 통해 로드한 모듈의 경로를 얻으려면 어떻게 해야 합니까(예: 일부 node_module에서) (0) | 2023.09.05 |
로그아웃 시 JWT 토큰을 폐기하는 방법은 무엇입니까? (0) | 2023.09.05 |