Llamadas mutuas entre contenedores docker

Registre la invocación de dos aplicaciones del contenedor docker durante el proceso de migración de datos. En
el proceso de migración de datos, se debe crear un nuevo contenedor docker, pero se creará el contenedor. Verifique el registro y descubra que el contenedor del pasaporte no tiene forma de llamar al contenedor de contactos, y el contenedor no está implementado. (Se encuentra que son llamados por el nombre del contenedor, y luego hacer ping al nombre del contenedor de contactos en el contenedor del pasaporte no es razonable)

[root@zfl ~]# docker exec -it passport bash
root@70a9e5d670c6:/# ping contacts
bash: ping: command not found
root@70a9e5d670c6:/# curl contacts
curl: (6) Could not resolve host: contacts
root@70a9e5d670c6:/# 

solución de registro

1. Método mediante resolución de nombres de dominio (método temporal)

Este enfoque no se aplica a futuras ampliaciones.

1.1 Agregar resolución de nombre de dominio de contactos en el pasaporte

1.1.1 Ver la ip de los contactos

[root@zfl ~]# docker inspect contacts |egrep -i ipadd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.5",
                    "IPAddress": "172.17.0.5",

1.1.2 Agregar nombre de dominio en el pasaporte

root@70a9e5d670c6:/# echo 172.17.0.5 contacts >>/etc/hosts
root@70a9e5d670c6:/# cat !$
cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.6	70a9e5d670c6
172.17.0.5 contacts
root@70a9e5d670c6:/# 

root@70a9e5d670c6:/# curl contacts
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@70a9e5d670c6:/# 

1.2 Crear contenedores directamente a través de la lista de complementos

1.2.1 Primero cree el contenedor llamado

[root@zfl ~]# docker run -itd --name contacts -p 800:80 nginx:latest 
e8c5a9008a6298685ae0706e0afd8784234b0d49d030524c2c0689c20218f735
[root@zfl ~]# docker inspect contacts |egrep -i ipadd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.5",
                    "IPAddress": "172.17.0.5",
[root@zfl ~]# 

1.2.2 add-list crea directamente el pasaporte del contenedor y lo escribe directamente en el archivo de hosts del contenedor

[root@zfl ~]# docker run -itd --name passport  --add-host contacts:172.17.0.5  -p 8009:80 nginx:latest
4999aac0f62d92a3dc8b074f5ab6c36c6f57b0d26552aae7d44f165c4f2fdaf2
[root@zfl ~]# 

[root@zfl ~]# docker exec -it passport bash
root@4999aac0f62d:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.5	contacts
172.17.0.6	4999aac0f62d
root@4999aac0f62d:/# curl contacts
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@4999aac0f62d:/# 

2. Por enlace

2.1 Primero crea el contenedor llamado

[root@zfl ~]# docker run -itd --name contacts -p 800:80 nginx:latest 
84d8e0689e01580567f854a1b863661b867ae16098c1b2344871fc59546327ab
[root@zfl ~]# 

2.2 Usar enlace para llamar al contenedor

[root@zfl ~]# docker run -itd --name passport  --link contacts  -p 8009:80 nginx:latest
df64c51de1530b03b23cef0f6e768c9225de90f2b6f8ea7a6121795c6306f4c9
[root@zfl ~]# 

[root@zfl ~]# docker exec -it passport bash
root@df64c51de153:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.5	contacts 84d8e0689e01
172.17.0.6	df64c51de153
root@df64c51de153:/# 

root@df64c51de153:/# curl contacts
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3. A través de la forma de red personalizada

Descubrimos que los dos tipos anteriores son un contenedor que llama a otro contenedor. Lo que
solo se puede dar cuenta es que un tipo llama al otro tipo y no pueden acceder entre sí.

3.1 Crear una red docker

[root@zfl ~]# docker network create --driver bridge --subnet 172.100.0.0/16 --gateway 172.100.0.1 br1  
957f7f074e0a73cce0e509beeb4885597a944f6f1e8876941976e99813acf7a2
55: br-957f7f074e0a: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:c7:2c:36:b6 brd ff:ff:ff:ff:ff:ff
    inet 172.100.0.1/16 brd 172.100.255.255 scope global br-957f7f074e0a
       valid_lft forever preferred_lft forever

[root@zfl ~]# docker network inspect br1
[
    {
    
    
        "Name": "br1",
        "Id": "957f7f074e0a73cce0e509beeb4885597a944f6f1e8876941976e99813acf7a2",
        "Created": "2023-05-07T21:41:03.93632345+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
    
    
            "Driver": "default",
            "Options": {
    
    },
            "Config": [
                {
    
    
                    "Subnet": "172.100.0.0/16",
                    "Gateway": "172.100.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
    
    
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
    
    },
        "Options": {
    
    },
        "Labels": {
    
    }
    }
]
[root@zfl ~]# 

3.2 Crear un contenedor usando la tarjeta de red br1

[root@zfl ~]# docker run -itd --name passport --network br1   -p 8009:80 nginx:latest
d4ec6ab13ec3c3685dc10843e46ee97753529a51962ea622f59a262b9cb1fbbe
[root@zfl ~]# docker run -itd --name contacts  --network br1   -p 8010:80 nginx:latest
6320f7352dc734df21995c5ada46c0286b375cebc920089bcb59fa6944e805f0

3.3 Llamar a los contactos en el pasaporte

[root@zfl ~]# docker exec -it passport bash

root@d4ec6ab13ec3:/# ping contacts
bash: ping: command not found
root@d4ec6ab13ec3:/# curl contacts
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3.4 Pasaporte de llamadas en contactos

[root@zfl ~]# docker exec -it contacts bash
root@6320f7352dc7:/# curl passport 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@6320f7352dc7:/# 

3.5 Diferencias entre la red predeterminada y la red personalizada

¿Por qué usa una red personalizada en forma de puente? ¿Por qué los contenedores docker creados de forma predeterminada no se pueden llamar entre sí?
Hablando de eso, algunas personas pueden preguntar, el controlador de tarjeta de red predeterminado también está en modo puente, y la red definida por el usuario también está en modo puente. ¿No es solo un cambio de nombre? ¿Por qué la tarjeta de red predeterminada no puede usar un alias para la resolución de direcciones IP?
Esta pregunta es buena, y el funcionario explicó la diferencia entre las dos tarjetas de red .

| Los puentes definidos por el usuario proporcionan una resolución de DNS automática entre contenedores.

Los contenedores en la red de puente predeterminada solo pueden acceder entre sí mediante direcciones IP, a menos que use la opción --link, que se considera heredada. En una red puente definida por el usuario, los contenedores pueden resolverse entre sí por nombre o alias.

La idea general de la traducción es que la tarjeta de red definida por el usuario puede proporcionar una resolución de DNS automática entre contenedores , y los contenedores en la red de puente predeterminada solo pueden acceder entre sí a través de direcciones IP, a menos que se use el parámetro --link. En las NIC definidas por el usuario, los contenedores pueden resolverse entre sí directamente por nombre o alias.

Supongo que te gusta

Origin blog.csdn.net/xiaolong1155/article/details/130548941
Recomendado
Clasificación