Ahora estoy tratando de asignar una IP estática 172.17.0.1 cuando se inicia un contenedor Docker.
Utilizo el puerto 2122 como el puerto ssh de este contenedor, de modo que dejo que este contenedor escuche el puerto 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
Este comando ejecutará un contenedor Docker con una IP aleatoria como 172.17.0.5, pero necesito asignar una IP específica al contenedor.
El siguiente script de shell es lo que hago referencia a la documentación de Docker en la configuración avanzada de red.
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
Este script de shell asignará una IP estática 172.17.0.1 y se vinculará al mundo bien. Pero cada vez que trato de enviar a este contenedor desde mi local, no funcionó. ¿Cuál es el problema que posiblemente conocí?

Respuestas:
Fácil con Docker versión 1.10.1, compilación 9e83765.
Primero debe crear su propia red de acopladores (mynet123)
que simplemente ejecutar la imagen (tomaré ubuntu como ejemplo)
luego en ubuntu shell
Además podrías usar
--hostnamepara especificar un nombre de host--add-hostpara agregar más entradas a / etc / hostsDocumentos (y por qué necesita crear una red) en https://docs.docker.com/engine/reference/commandline/network_create/
fuente
Para
docker-composeque pueda usar siguientedocker-compose.ymldesde el host puedes probar usando:
Modern
docker-composeno cambia la dirección IP con tanta frecuencia.Para encontrar ips de todos los contenedores en su
docker-composeen una sola línea use:Si desea automatizar, puede usar algo como este ejemplo general
fuente
ip_rangeip_range. Estoy usando la versión: '3.4'.No es una respuesta directa pero podría ayudar.
Ejecuto la mayoría de mis servicios dockerizados vinculados a ips estáticos propios usando el siguiente enfoque:
Muestra:
fuente
Esto funciona para mi.
Crea una red con
docker network create --subnet=172.17.0.0/16 selnetEjecutar imagen del acoplador
docker run --net selnet --ip 172.18.0.2 hubAl principio, tengo
Solución: Aumento del 2º cuádruple de la IP [.18. en lugar de .17.]
fuente
Me topé con este problema durante el intento de dockerise Avahi que necesita ser consciente de su IP pública para funcionar correctamente. Asignar IP estática al contenedor es complicado debido a la falta de soporte para la asignación de IP estática en Docker.
Este artículo describe la técnica de cómo asignar IP estática al contenedor en Debian :
Se debe comenzar con el servicio Docker
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Supongo que elbr0puente ya está configurado.El contenedor debe comenzar con
--cap-add=NET_ADMIN --net=bridgeRecipiente interior
pre-up ip addr flush dev eth0en/etc/network/interfacespuede ser utilizado para desestimar dirección IP asignada por acoplable como en ejemplo siguiente:/etc/init.d/networking start. Además, el script de entrada debe editar o completar el/etc/hostsarchivo para eliminar las referencias a la IP asignada por Docker.fuente
Puede configurar la IP mientras la ejecuta.
Vea mi ejemplo en https://github.com/RvdGijp/mariadb-10.1-galera
fuente
Puede acceder al servicio de otros contenedores por su nombre (
ping apacheobtendrá la ip ocurl http://apacheaccedería al servicio http) Y esta puede ser una alternativa a una ip estática.fuente
Si desea que su contenedor tenga su propio socket virtual de ethernet (con su propia dirección MAC), iptables, use el controlador Macvlan. Esto puede ser necesario para enrutar el tráfico hacia su enrutador / ISP.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
fuente