2 votes

Comment atteindre un service lié dans docker-compose ?

Según https://docs.docker.com/compose/compose-file/#links si je spécifie le nom d'un autre service dans la rubrique links sur docker-compose je devrais pouvoir atteindre ce service avec un nom d'hôte identique au nom du service.

Pour tester cela, j'ai essayé ce qui suit docker-compose.yml :

version: '3'

services:
  tor:
    build: ./tor

  use_tor:
    build: ./use_tor
    links:
      - tor

où le tor y use_tor Les répertoires contiennent Dockerfile s :

.
├── docker-compose.yml
├── tor
│   └── Dockerfile
└── use_tor
    └── Dockerfile

qui sont, pour tor :

FROM alpine:latest
EXPOSE 9050
RUN apk --update add tor
CMD ["tor"]

et pour use_tor :

FROM alpine:latest
CMD ["nc", "-z", "tor", "9050"]

Cependant, si je fais docker-compose build suivi par docker-compose up Je vois dans les journaux que le use_tor Le service quitte avec le code d'état 1 :

Starting scrapercompose_tor_1
Recreating scrapercompose_use_tor_1
Attaching to scrapercompose_tor_1, scrapercompose_use_tor_1
tor_1      | May 02 15:36:34.123 [notice] Tor v0.2.8.12 running on Linux with Libevent 2.0.22-stable, OpenSSL LibreSSL 2.4.4 and Zlib 1.2.8.
tor_1      | May 02 15:36:34.123 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
tor_1      | May 02 15:36:34.123 [notice] Configuration file "/etc/tor/torrc" not present, using reasonable defaults.
tor_1      | May 02 15:36:34.129 [notice] Opening Socks listener on 127.0.0.1:9050
tor_1      | May 02 15:36:34.000 [notice] Parsing GEOIP IPv4 file /usr/share/tor/geoip.
tor_1      | May 02 15:36:34.000 [notice] Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
tor_1      | May 02 15:36:34.000 [warn] You are running Tor as root. You don't need to, and you probably shouldn't.
tor_1      | May 02 15:36:34.000 [notice] We were built to run on a 64-bit CPU, with OpenSSL 1.0.1 or later, but with a version of OpenSSL that apparently lacks accelerated support for the NIST P-224 and P-256 groups. Building openssl with such support (using the enable-ec_nistp_64_gcc_128 option when configuring it) would make ECDH much faster.
tor_1      | May 02 15:36:34.000 [notice] Bootstrapped 0%: Starting
scrapercompose_use_tor_1 exited with code 1
tor_1      | May 02 15:36:35.000 [notice] Bootstrapped 80%: Connecting to the Tor network
tor_1      | May 02 15:36:36.000 [notice] Bootstrapped 85%: Finishing handshake with first hop
tor_1      | May 02 15:36:36.000 [notice] Bootstrapped 90%: Establishing a Tor circuit
tor_1      | May 02 15:36:36.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
tor_1      | May 02 15:36:36.000 [notice] Bootstrapped 100%: Done

Apparemment, la commande nc -z tor 9050 ne renvoie pas le code d'état attendu 0 sur le use_tor récipient. Cependant, il me semble que cela devrait fonctionner. Par exemple, si je modifie le tor service de cartographie du port 9050 sur le conteneur vers l'hôte comme suit,

services:
  tor:
    build: ./tor
    ports:
      - "9050:9050"

Alors dans mon terminal ordinaire, je vois que nc -z localhost 9050 donne un code de sortie de 0 :

kurt@kurt-ThinkPad:~$ nc -z localhost 9050
kurt@kurt-ThinkPad:~$ echo $?
0

En bref, je m'attendrais à ce que le nom d'hôte tor pour se comporter comme localhost sur mon hôte après le mappage de port, mais cela ne semble pas être le cas. Pourquoi cela ne fonctionne-t-il pas ?

1voto

radbrawler Points 641

Pour une fois, cette question m'a interpellé. Bien que j'ai cloné cet exemple, je n'ai pas réussi à obtenir la solution. Selon docker docs

El EXPOSE informe Docker que l'instruction écoute sur les ports réseau spécifiés au moment de l'exécution. EXPOSE ne rend pas les ports du conteneur accessibles à l'hôte . Pour ce faire, vous devez utiliser l'indicateur -p pour publier une gamme de ports ou l'indicateur -P pour publier un publier tous les ports exposés . Vous pouvez exposer un numéro de port et le publier en externe sous un autre numéro.

Je pense donc que cela peut être dû au fait que le service tor fonctionne sur 127.0.0.1 au lieu de 0.0.0.0 (pour la différence entre les deux vous pouvez regarder aquí )

tor_1 | May 02 15:36:34.129 [notice] Ouverture de l'écouteur Socks sur 127.0.0.1:9050

Il est accessible par le terminal est en raison de la ports argument dans docker-compose.yml qui fait la même chose que -p argument.

En somme, si le service de tor écoute sur 0.0.0.0 alors cela devrait fonctionner comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X