Ao configurar meu primeiro docker
ambiente, criei uma rede específica:
root@srv /e/docker# docker network inspect docker
[
{
"Name": "docker",
"Id": "7b20560b36032d36ffe6c0ebece6b4408355d207f4e203a2957b0434ee0afdc1",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.200.0.0/24"
}
]
},
"Internal": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
Criei um container a partir de uma imagem para esta rede com um IP específico:
root@srv /e/docker# docker create --network docker --ip 10.200.0.2 --hostname dev -p 22:22 --name dev base
807f3892241d314d20837c4c749912097e1f34c62884401acd9a06e201cb5876
Em seguida, iniciei este contêiner e obtive:
root@srv /e/docker# docker start dev
Error response from daemon: driver failed programming external connectivity on endpoint dev (807f3892241d314d20837c4c749912097e1f34c62884401acd9a06e201cb5876): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use
Error: failed to start containers: dev
Na verdade, ele tem um supervisord
início sshd -D
que, por padrão, se liga a todos os endereços IP disponíveis para esse host . Como seu IP é 10.200.0.2
, eu esperava sshd
vincular a ele 127.0.0.1
e 10.200.0.2
. Parece que esta porta é tomada por algo, mas o quê?
O host está em sshd
execução, mas isso não deve importar para o contêiner convidado, certo? (uma vez que vive em seu próprio mundo que conhece apenas os dois IPs acima)?
EDIT após comentários: Ou seja, gostaria sshd
de vincular ao IP do container (aquele que vê = 10.200.0.2
) e ter essa porta exposta fora do container, no mesmo IP. Ou, em termos práticos, gostaria de poder, a partir do host, ssh [email protected]
chegar sshd
ao container.
Não publique a porta se quiser se conectar localmente.
/e/docker# docker create --network docker --ip 10.200.0.2 --hostname dev --name dev base
Você deseja expor a porta. https://docs.docker.com/engine/reference/builder/
teste/DockerFile
docker build -t test -f test/DockerFile test/DockerFile
Tente alterar o
-p publish
parâmetro para vincular a um IP específico, por exemplo-p 10.200.0.2:22:22
. Por padrão, o docker publica a porta exposta para 0.0.0.0, se bem me lembro. E como você mencionou, você já tem a porta 22 em uso na rede host.Portanto, o
-p
sinalizador publica a porta no host. Basta excluir a tag para usá-la apenas na rede de contêineres.