Agora estou tentando atribuir um IP estático 172.17.0.1 quando um contêiner do Docker for inicializado.
Eu uso a porta 2122 como a porta ssh deste contêiner para permitir que esse contêiner escute a porta 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
Este comando executará um contêiner do Docker com um IP aleatório como 172.17.0.5, mas preciso atribuir um IP específico ao contêiner.
O script de shell a seguir é o que eu refiro à documentação do Docker em configurações avançadas de rede.
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
Esse script de shell atribuirá um IP estático 172.17.0.1 e um link para o mundo. Mas sempre que tento ssh neste contêiner do meu local, ele não funciona. Qual é o problema que eu encontrei?
Respostas:
Fácil com o Docker versão 1.10.1, build 9e83765.
Primeiro, você precisa criar sua própria rede docker (mynet123)
do que simplesmente executar a imagem (vou usar o ubuntu como exemplo)
então no shell ubuntu
Além disso, você pode usar
--hostname
especificar um nome de host--add-host
para adicionar mais entradas ao / etc / hostsDocumentos (e por que você precisa criar uma rede) em https://docs.docker.com/engine/reference/commandline/network_create/
fonte
Para
docker-compose
você pode usar o seguintedocker-compose.yml
do host, você pode testar usando:
Moderno
docker-compose
não altera o endereço IP com tanta frequência.Para encontrar ips de todos os contêineres no seu
docker-compose
em uma única linha, use:Se você deseja automatizar, pode usar algo como este exemplo gist
fonte
ip_range
ip_range
. Estou usando a versão: '3.4'.Não é uma resposta direta, mas poderia ajudar.
Eu executo a maioria dos meus serviços dockerized vinculados aos próprios ips estáticos usando a próxima abordagem:
Amostra:
fonte
Isso funciona para mim.
Crie uma rede com
docker network create --subnet=172.17.0.0/16 selnet
Executar imagem do Docker
docker run --net selnet --ip 172.18.0.2 hub
No começo eu consegui
Solução: Aumento do 2º quadruplo do IP [.18. em vez de 0,17.]
fonte
Eu me deparei com esse problema durante a tentativa de encaixar o Avahi, que precisa estar ciente de seu IP público para funcionar corretamente. A atribuição de IP estático ao contêiner é complicada devido à falta de suporte à atribuição de IP estático no Docker.
Este artigo descreve a técnica de como atribuir IP estático ao contêiner no Debian :
O serviço Docker deve ser iniciado com
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Presumo que abr0
ponte já esteja configurada.O contêiner deve ser iniciado com
--cap-add=NET_ADMIN --net=bridge
Recipiente dentro
pre-up ip addr flush dev eth0
no/etc/network/interfaces
pode ser usada para descartar o endereço IP atribuído pelo Docker como no exemplo a seguir:/etc/init.d/networking start
. O script de entrada também precisa editar ou preencher o/etc/hosts
arquivo para remover referências ao IP atribuído ao Docker.fonte
Você pode definir o IP enquanto o executa.
Veja meu exemplo em https://github.com/RvdGijp/mariadb-10.1-galera
fonte
Você pode acessar o serviço de outros contêineres pelo nome (
ping apache
obterá o ip ou acessariacurl http://apache
o serviço http). E isso pode ser uma alternativa a um IP estático.fonte
Se você deseja que seu contêiner tenha seu próprio soquete Ethernet virtual (com seu próprio endereço MAC), iptables, use o driver Macvlan. Isso pode ser necessário para direcionar o tráfego para o roteador / ISPs.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
fonte