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
--hostname
para especificar un nombre de host--add-host
para 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-compose
que pueda usar siguientedocker-compose.yml
desde el host puedes probar usando:
Modern
docker-compose
no cambia la dirección IP con tanta frecuencia.Para encontrar ips de todos los contenedores en su
docker-compose
en una sola línea use:Si desea automatizar, puede usar algo como este ejemplo general
fuente
ip_range
ip_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 selnet
Ejecutar imagen del acoplador
docker run --net selnet --ip 172.18.0.2 hub
Al 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 elbr0
puente ya está configurado.El contenedor debe comenzar con
--cap-add=NET_ADMIN --net=bridge
Recipiente interior
pre-up ip addr flush dev eth0
en/etc/network/interfaces
puede 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/hosts
archivo 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 apache
obtendrá la ip ocurl http://apache
accederí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