Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

377
Vistas
docker-compose: especifique qué interfaz se conectará a cada red (cuando tenga varias redes)

Dentro de docker-compose.yaml defino 4 redes diferentes:

 networks: vpp-nw: vpp-client: vpp-server: vpp-db:

que utilizan las siguientes direcciones de red respectivamente:

 172.20.0.x 172.21.0.x 172.22.0.x 172.23.0.x

Uno de los contenedores que uso, se conecta a las 4 redes (con el mismo orden):

 # part of docker-compose.yaml services: my_tool: build: ./my_tool image: tgogos/my_tool container_name: my_tool_docker_comp hostname: my_tool privileged: true links: - my_db networks: - vpp-nw - vpp-client - vpp-server - vpp-db ports: - "8888:8888"

¿Hay alguna manera de definir qué interfaz se conectará a cada red? Por ejemplo, me gustaría:

  • eth0 para conectarse al primero (vpp-nw)
  • eth1 para conectarse al segundo (vpp-client)
  • eth2 para conectarse al tercero (vpp-server)
  • eth3 para conectarse al cuarto (vpp-db)

A continuación puede ver una salida de ifconfig de este contenedor. Las NIC parecen conectarse a cada red de forma arbitraria cada vez que docker-compose down | docker-compose up ...

 eth0 Link encap:Ethernet HWaddr 02:42:ac:15:00:03 inet addr:172.21.0.3 Bcast:0.0.0.0 Mask:255.255.0.0 eth1 Link encap:Ethernet HWaddr 02:42:ac:17:00:03 inet addr:172.23.0.3 Bcast:0.0.0.0 Mask:255.255.0.0 eth2 Link encap:Ethernet HWaddr 02:42:ac:14:00:02 inet addr:172.20.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 eth3 Link encap:Ethernet HWaddr 02:42:ac:16:00:03 inet addr:172.22.0.3 Bcast:0.0.0.0 Mask:255.255.0.0

Editar:

Lectura adicional, problemas de github:

  • El orden en que las redes se asignan a las interfaces no coincide con el orden en que aparecen en el archivo de composición #4645
  • 17.06 Red de entrada L4 no accesible #34003
  • Nombre de la interfaz de control en la red acoplable múltiple #25181
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Esta no es una respuesta, pero es una confirmación del comportamiento que ha informado junto con reproductores completos que podrían usarse para presentar un informe de error.

Soy capaz de reproducir tu comportamiento. Creo que es un error en docker-compose , ya que la clave de networks en su servicio es una lista ordenada. Espero que las redes se asignen a las interfaces en el orden en que aparecen en el archivo.

Usando este docker-compose.yml (en un directorio llamado nwtest ):

 version: "2" services: server: image: alpine command: sleep 999 networks: - nw0 - nw1 - nw2 - nw3 networks: nw0: nw1: nw2: nw3:

Y este script de shell:

 #!/bin/sh docker-compose up -d for nw in 0 1 2 3; do nw_cidr=$(docker network inspect -f '{{ (index .IPAM.Config 0).Subnet }}' \ nwtest_nw${nw}) if_cidr=$(docker exec -it nwtest_server_1 ip addr show eth${nw} | awk '$1 == "inet" {print $2}') nw_net=$(ipcalc -n $nw_cidr | cut -f2 -d=) if_net=$(ipcalc -n $if_cidr | cut -f2 -d=) echo "nw${nw} $nw_net eth${nw} ${if_net}" if [ "$if_net" != "$nw_net" ]; then echo "MISMATCH: nw${nw} = $nw_net, eth${nw} = $if_net" >&2 fi done docker-compose stop

Puede verificar rápidamente el problema:

 $ sh runtest.sh Starting nwtest_server_1 nw0 192.168.32.0 eth0 192.168.32.0 nw1 192.168.48.0 eth1 192.168.48.0 nw2 192.168.64.0 eth2 192.168.80.0 MISMATCH: nw2 = 192.168.64.0, eth2 = 192.168.80.0 nw3 192.168.80.0 eth3 192.168.64.0 MISMATCH: nw3 = 192.168.80.0, eth3 = 192.168.64.0 Stopping nwtest_server_1 ...

Además, este problema parece ser específico de docker-compose ; si crea un contenedor Docker con docker run y luego adjunta varias redes, siempre se asignan a las interfaces de forma secuencial, como cabría esperar. El script de prueba para eso es:

 #!/bin/sh docker rm -f nwtest_server_1 docker run -d --name nwtest_server_1 --network nwtest_nw0 \ alpine sleep 999 for nw in 1 2 3; do docker network connect nwtest_nw${nw} nwtest_server_1 done for nw in 0 1 2 3; do nw_cidr=$(docker network inspect -f '{{ (index .IPAM.Config 0).Subnet }}' \ nwtest_nw${nw}) if_cidr=$(docker exec -it nwtest_server_1 ip addr show eth${nw} | awk '$1 == "inet" {print $2}') nw_net=$(ipcalc -n $nw_cidr | cut -f2 -d=) if_net=$(ipcalc -n $if_cidr | cut -f2 -d=) echo "nw${nw} $nw_net eth${nw} ${if_net}" if [ "$if_net" != "$nw_net" ]; then echo "MISMATCH: nw${nw} = $nw_net, eth${nw} = $if_net" >&2 fi done docker rm -f nwtest_server_1
about 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el atributo de prioridad en la referencia de composición de Docker para especificar el orden en que se componen las redes adjuntas a su contenedor.

https://docs.docker.com/compose/compose-file/compose-file-v2/#priority

 ... services: foo: image: foo:latest restart: always networks: network1: priority: 1000 # eth0 network2: priority: 900 # eth1 network3: # Default priority is 0, eth2 ...
about 4 years ago · Santiago Trujillo Denunciar

0

Puedes intentar montar archivos de configuración

es decir, para imágenes basadas en RH:

 /etc/sysconfig/network-scripts/ifcfg-eth0

Entonces, su archivo yml se vería como a continuación:

 # part of docker-compose.yaml services: my_tool: build: ./my_tool image: tgogos/my_tool container_name: my_tool_docker_comp hostname: my_tool privileged: true links: - my_db networks: - vpp-nw - vpp-client - vpp-server - vpp-db volumes: - ./conf/eth0:/etc/sysconfig/network-scripts/ifcfg-eth0 - ./conf/eth1:/etc/sysconfig/network-scripts/ifcfg-eth1 - ./conf/eth2:/etc/sysconfig/network-scripts/ifcfg-eth2 - ./conf/eth3:/etc/sysconfig/network-scripts/ifcfg-eth3 ports: - "8888:8888"
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda