Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

2.1K
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!