J'ai un conteneur Docker en cours d'exécution (de this image). Le conteneur semble fonctionner correctement pour autant que je puisse voir (les fichiers journaux semblent bons et peuvent se connecter via SSH au conteneur et utiliser SQLPlus à l'intérieur). Cependant, je ne parviens pas à me connecter au conteneur à partir de mon hôte.
J'ai commencé le conteneur comme ceci:
Sudo docker run -d -p 49160:22 -p 49161:1521 -p 49162:8080 alexeiled/docker-Oracle-xe-11g
J'ai inspecté la liaison de port par ceci:
$ Sudo docker port <container> 8080
0.0.0.0:49162
Et quand je fais un Sudo docker inspect <container>
J'obtiens entre autres ceci:
"NetworkSettings": {
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"Gateway": "172.17.42.1",
"Bridge": "docker0",
"PortMapping": null,
"Ports": {
"1521/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "49161"
}
],
"22/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "49160"
}
],
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "49162"
}
]
}
},
Lorsque j'essaie d'envoyer une requête ping au conteneur, le conteneur répond:
$ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_req=1 ttl=64 time=0.138 ms
64 bytes from 172.17.0.2: icmp_req=2 ttl=64 time=0.132 ms
Mais je ne peux pas me connecter de mon hôte (Windows) au conteneur Docker . J'exécute Docker dans une machine virtuelle Ubuntu 12.04 (dans VirtualBox sous Windows). Je ne sais pas si c'est un problème avec Docker, avec mon Linux VM ou avec VirtualBox. J'ai transmis un tas de ports dans VirtualBox:
Ceci est le résultat de Sudo netstat -tpla
:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:sunrpc *:* LISTEN 542/rpcbind
tcp 0 0 *:ssh *:* LISTEN 1661/sshd
tcp 0 0 *:51201 *:* LISTEN 831/rpc.statd
tcp 0 80 docker:ssh 10.0.2.2:62220 ESTABLISHED 1902/sshd: vagrant
tcp6 0 0 [::]:49160 [::]:* LISTEN 2388/docker
tcp6 0 0 [::]:49161 [::]:* LISTEN 2388/docker
tcp6 0 0 [::]:56105 [::]:* LISTEN 831/rpc.statd
tcp6 0 0 [::]:49162 [::]:* LISTEN 2388/docker
tcp6 0 0 [::]:sunrpc [::]:* LISTEN 542/rpcbind
tcp6 0 0 [::]:ssh [::]:* LISTEN 1661/sshd
Une idée pourquoi je ne peux pas me connecter de Windows à mon conteneur Docker (en cours d'exécution)?
MISE À JOUR:
Votre configuration me semble correcte, mais je pense que les ports 49160-49162
doit être lié à l'interface IPv4 et non à IPv6. J'ai googlé cela et il semble que vous ayez rencontré un bogue ouvert dans docker:
Je vois deux solutions à votre problème:
172.17.42.1:49162:8080
Répondez avant de modifier:
Vous ne pouvez pas envoyer de requêtes ping aux ports. Ping utilise le protocole ICMP.
Si vous ne pouvez pas vous connecter au port publié, vous pouvez vérifier si un service spécifique dans le conteneur Docker se lie à l'interface réseau appropriée (par exemple 0.0.0.0
) et non à localhost
. Vous pouvez vérifier tous les ports d'écoute dans le conteneur: netstat -tpla
.
Lorsque vous exécutez Docker dans Windows, la construction est la suivante
Windows machine [
Docker Virtual Box VM [
Container1,
Container2,
...
]
]
Ainsi, lorsque vous exposez un port dans votre conteneur et le liez à toutes les adresses de la machine hôte, dites à l'aide de -p
paramètre, le port est réellement exposé dans la boîte virtuelle docker VM et non sur la machine Windows.
Dites par exemple que vous courez
docker run --name MyContainerWithPortExpose -d -p 127.0.0.1:43306:3306 SomeImage:V1
Exécutez une commande netstat
à partir de votre invite de commandes Windows. Étrangement, vous ne verrez pas le localhost:43306
port en mode LISTEN
Maintenant, faites un boot2docker ssh
de ton boot2docker
console pour se connecter à la boîte virtuelle docker VM Exécutez une commande netstat
. Vola ..... vous trouverez localhost:43306
répertorié sur la machine virtuelle de la boîte virtuelle docker
Solution de contournement:
Une fois dans la VM Virtual Box, exécutez une commande ipconfig
et recherchez l'adresse IP de la VM. Utilisez cette adresse IP dans la commande run docker, au lieu de 127.0.0.1
L'inconvénient de cette solution est que votre serveur DHCP peut parfois faire des ravages en attribuant des adresses IP différentes chaque fois que vous démarrez boot2docker
boîte virtuelle VM.