PDA

Visualizza la versione completa : Accedere a localhost dall'interno di Docker


astros3
05-03-2018, 11:20
+ curl localhost
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
bla bla bla...


Tutto ok, ma adesso proviamo dall'interno di un contenitore docker



+ cat Dockerfile
FROM php:7.2.2-cli

+ cat test.sh
#!/bin/bash -e
cd $(dirname "$0")

docker build --network host -t test-image .
docker run test-image curl localhost
+ ./test.sh
Sending build context to Docker daemon 4.096 kB
Step 1/1 : FROM php:7.2.2-cli
---> 21c3582549e6
Successfully built 21c3582549e6
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) Failed to connect to localhost port 80: Connection refused


Perchè non funziona?

paolino_delta_t
05-03-2018, 11:43
Non funziona perchè docker implementa un namespace anche per le interfacce di networking, cioè il container al suo interno ha una sua rete isolata da quella dell'host. E ovviamente nel container non hai un server http in ascolto sulla porta 80, per cui ti dice connection refused.

Devi usare l'opzione host per il networking https://docs.docker.com/network/host/

astros3
05-03-2018, 12:50
Non funziona perchè docker implementa un namespace anche per le interfacce di networking, cioè il container al suo interno ha una sua rete isolata da quella dell'host. E ovviamente nel container non hai un server http in ascolto sulla porta 80, per cui ti dice connection refused.

Devi usare l'opzione host per il networking https://docs.docker.com/network/host/
In pratica dovrei usare l'opzione --network host ?
E' quello che ho fatto.
Purtroppo uso docker da poco, perdona l'ignoranza.

paolino_delta_t
05-03-2018, 15:36
In pratica dovrei usare l'opzione --network host ?
E' quello che ho fatto.
Purtroppo uso docker da poco, perdona l'ignoranza.

Si, come specificato nella documentazione.

Questo vale su Linux. Su Windows e macOS, Docker all'interno di una macchina virtuale e quindi non è in grado di comunicare direttamente con l'host ( a meno che la VM non lo preveda ).

astros3
05-03-2018, 17:08
Si, come specificato nella documentazione.

Questo vale su Linux.

Infatti io uso linux (ubuntu)

Su Windows e macOS, Docker all'interno di una macchina virtuale e quindi non è in grado di comunicare direttamente con l'host ( a meno che la VM non lo preveda ).

Non uso ne win, ne mac, quindi non vado ad approfondire :)

Loading