Basta ya de buscar en otros sitios ya que llegaste al lugar adecuado, tenemos la solución que quieres y sin complicarte.
Solución:
Como se encuentra aquí, conseguí que esto funcionara con docker-compose. Guardar como docker-compose.yml
:
version: '3'
services:
outgoing-wont-work:
image: alpine
networks:
- no-internet
command: ping -c 3 google.com # will crash
internal-will-work:
image: alpine
networks:
- no-internet
command: ping -c 3 internal-and-external
internal-and-external:
image: alpine
networks:
- no-internet
- internet
command: ping -c 3 google.com
networks:
no-internet:
driver: bridge
internal: true
internet:
driver: bridge
Entonces corre docker-compose up -d
, docker-compose ps
mostrará algo como esto después de unos segundos:
Name Command State Ports
----------------------------------------------------------------------------------
dco_inet_internal-and-external_1 ping -c 3 google.com Exit 0
dco_inet_internal-will-work_1 ping -c 3 internal-and-ext ... Exit 0
dco_inet_outgoing-wont-work_1 ping -c 3 google.com Exit 1
Creación de red para acceso a internet.
docker red crear –subnet=172.19.0.0/16 internet
Creación de red para bloquear el acceso a internet.
docker red crear –interno –subred 10.1.1.0/24 sin internet
Si desea conectar el contenedor acoplable a Internet
docker network connect internet container-name
Si desea bloquear el acceso a Internet
docker network connect no-internet container-name
Nota
en la red interna no podemos exponer puertos para conectar el mundo exterior, consulte esta pregunta para obtener más detalles
Otra opción, si necesita exponer puertos en un contenedor sin acceso a Internet, pero quiere dejar que se comunique con otros contenedores, sería proporcionar una configuración de DNS falsa. Sin embargo, esta no es una solución perfecta, ya que no impide el acceso IP directo al mundo exterior.
docker-compose.yaml
version: '3'
services:
service1:
image: alpine
command: sh -c 'ping service2 -c 1; ping google.com -c 1'
dns: 0.0.0.0
service2:
image: alpine
command: sh -c 'ping service1 -c 1; ping google.com -c 1'
dns: 0.0.0.0
isolated> docker-compose up
Recreating isolated_service1_1 ... done Recreating isolated_service2_1 ... done Attaching to isolated_service2_1, isolated_service1_1
service1_1 | PING service2 (172.18.0.2) 56(84) bytes of data.
service1_1 | 64 bytes from isolated_service2_1.isolated_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.038 ms
service1_1 |
service1_1 | --- service2 ping statistics ---
service1_1 | 1 packets transmitted, 1 received, 0% packet loss, time 0ms
service1_1 | rtt min/avg/max/mdev = 0.038/0.038/0.038/0.000 ms
service2_1 | PING service1 (172.18.0.3) 56(84) bytes of data.
service2_1 | 64 bytes from isolated_service1_1.isolated_default (172.18.0.3): icmp_seq=1 ttl=64 time=0.093 ms
service2_1 |
service2_1 | --- service1 ping statistics ---
service2_1 | 1 packets transmitted, 1 received, 0% packet loss, time 0ms
service2_1 | rtt min/avg/max/mdev = 0.093/0.093/0.093/0.000 ms
service1_1 | ping: google.com: Temporary failure in name resolution
service2_1 | ping: google.com: Temporary failure in name resolution
isolated_service1_1 exited with code 2
isolated_service2_1 exited with code 2
Reseñas y calificaciones
Si para ti ha sido de utilidad este post, agradeceríamos que lo compartas con más entusiastas de la programación y nos ayudes a extender nuestra información.