Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

2.1K
Visualizações
Cómo conectar frontend a backend a través de redes docker-compose

Estoy tratando de dockerizar mi aplicación angular + express. Tengo un archivo docker-compose que crea los dos contenedores, y puedo acceder a los contenedores desde mi máquina host (usando mi navegador), pero obtendré un "ERR_NAME_NOT_RESOLVED" cada vez que intento acceder al backend desde http solicitudes realizadas por mi frontend.

Busqué el problema y parece que la mayoría sugiere que el nombre del servicio y el puerto del contenedor deberían ser suficientes para acceder al otro contenedor cuando están en la misma red. Intenté presionar " http://express:8000/user?user=030f0e70-9a8f-11e9-b5d1-f5cb6c0f3616 ", que creo que debería funcionar dado lo que he visto en otros lugares, pero independientemente, obtengo el mismo error.

Mi archivo docker-compose parece

 version: '3' # specify docker-compose version # Define the services/containers to be run services: angular: # name of the first service build: ./ # specify the directory of the Dockerfile ports: - "4200:80" # specify port forewarding links: - "express" depends_on: - "express" express: #name of the second service build: # specify the directory of the Dockerfile context: ./ dockerfile: dockerfile.be ports: - "8000:8000" #specify ports forewarding expose: - "8000"

Idealmente, me gustaría que mi interfaz pudiera acceder al otro contenedor con un punto final establecido, para poder implementar la aplicación con cambios mínimos. Agradecería cualquier consejo. Siento que me estoy perdiendo algo realmente simple, pero después de algunas horas de retoques, todavía no lo he captado.

¡Gracias!

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Unas pocas cosas:

  1. Al utilizar la exposición , hace que los puertos publicados del contenedor solo estén disponibles para los servicios vinculados/en red. Esta es una de las razones por las que no puede acceder localmente.
  2. En lugar de presionar http://express:8000/ , debe intentar presionar http://localhost:8000 . El servicio se está publicando en su sistema de host local y no está siendo atendido por nada de forma predeterminada (por ejemplo, IIS, NGINX).
  3. Agregue una red definida personalizada en su archivo de composición en lugar de usar enlaces. Esta es ahora la forma principal de conectar contenedores en red :

     version: '3' # specify docker-compose version services: angular: # name of the first service build: ./ # specify the directory of the Dockerfile ports: - "4200:80" # maps port 4200 on localhost to 80 in container network: - mynetwork depends_on: - "express" express: # name of the second service build: # specify the directory of the Dockerfile context: ./ dockerfile: dockerfile.be ports: - "8000:8000" # maps port 8000 on localhost to 8000 in container networks: - mynetwork networks: mynetwork:

    2 : https://docs.docker.com/compose/compose-file/#expose

over 4 years ago · Santiago Trujillo Relatório

0

De hecho, su tráfico es el siguiente:

  1. La página de solicitud del navegador del usuario desde angular container , luego todas las páginas se representarán en el navegador del usuario.

  2. El código javascript frontal que usa angular HttpClient para obtener los datos del express container .

    En ese momento, aunque docker-compose configuró una red personalizada para usted que ofrece auto-dns para resolver angular & express , pero este dns solo funciona entre contenedores, no afecta al host.

    Pero, su augular HttpClient cuya llamada http://express se produjo en el navegador del usuario que no está en el contenedor, por lo que el auto-dns definitivamente no funciona para que usted resuelva el nombre express .

Para usted, si solo desea abrir el navegador desde su docker host, puede usar localhost , pero si también desea que el usuario de otra máquina visite su web, debe usar la ip de su dockerhost.

Luego, en angular HttpClient , debe usar algo como http://your_dockerhost_ip:8000 para visitar el contenedor express.

Si está interesado, puede visitar esto para ver que User-defined bridges provide automatic DNS resolution between containers .

over 4 years ago · Santiago Trujillo Relatório

0

 **sample docker-compose.yaml** version: '3.5' services: angular: image: "angular-alpine:0.0.1" container_name: angular tty: true stdin_open: true networks: app_net: ipv4_address: 172.16.238.05 depends_on: - express express: image: "express:0.0.1" container_name: express tty: true stdin_open: true networks: app_net: ipv4_address: 172.16.238.10 networks: app_net: driver: bridge ipam: driver: default config: - subnet: 172.16.238.0/24

>"1. Angular se ejecutará en 172.16.238.05:4200 y express se ejecutará en 172.16.238.10:some-port. 2. modifique sus config.ts o parámetro.ts o cualquier archivo donde configure express url en 172.16.238.10:some -puerto. ahora su angular se conectará a express ".

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda