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

745
Views
La conexión al servidor en el contenedor Docker en localhost es muy lenta

Quería probar Docker como una herramienta para el desarrollo local. docker-compose para activar 3 contenedores: uno para la base de datos (postgres), front-end (ejecutando webpack y node sass en modo reloj) y back-end (Elixir/Phoenix ).

Todo funciona muy bien, excepto que cuando presiono localhost:4000 , la carga de la página es realmente lenta: 10-15 segundos solo para obtener la página de inicio de sesión, que es estática.

Revisé los registros de docker-compose y los tiempos de respuesta del servidor son rápidos como de costumbre, lo que para mí significa que algo está ralentizando la conexión con el contenedor.

Cuando ejecuté el servidor directamente en la Terminal nuevamente, todo fue bastante rápido, por ejemplo, toma 1 segundo para cargar la misma página.

Soy nuevo en Docker, así que sospecho que me estoy perdiendo algo en cuanto a la configuración. Cualquier idea es apreciada. ¡Gracias!

Configuración

docker-compose.yml

 version: "3.6" services: postgres: container_name: postgres image: postgres:11.0-alpine ports: - 5432:5432 volumes: - postgres:/var/lib/postgresql/data front-end: container_name: front-end env_file: - "docker/dev/.env" build: context: "." dockerfile: "docker/dev/Dockerfile.front-end" volumes: - .:/app - node_modules:/app/node_modules - static:/app/priv/static command: npm run dev backend: container_name: backend build: context: "." dockerfile: "docker/dev/Dockerfile.backend" env_file: - "docker/dev/.env" depends_on: - postgres - front-end ports: - 4000:4000 stdin_open: true tty: true volumes: - .:/app - elixir-deps:/app/deps - static:/app/priv/static command: iex -S mix phx.server volumes: postgres: elixir-deps: node_modules: static: driver_opts: type: "tmpfs" device: "tmpfs"

Dockerfile.front-end

 FROM node:8.10-alpine WORKDIR /app COPY package.json ./ COPY package-lock.json ./ RUN npm install COPY . .

Dockerfile.backend

 FROM elixir:1.8-alpine RUN apk update && apk add build-base inotify-tools postgresql-dev WORKDIR /app COPY mix.exs ./ COPY mix.lock ./ RUN mix local.hex --force && mix local.rebar --force \ && mix deps.get && mix deps.compile COPY . . EXPOSE 4000

Versiones y otra información:

 MacOS Mojave 10.14.3 Docker Desktop 2.0.0.3 (Engine 18.09.2, Compose: 1.23.2) MacBook Pro 13" (Early 2015, 16GB RAM/3.1GHz Core i7)
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Actualización 5 de junio de 2020:

Es significativamente mejor usar docker-sync para el desarrollo local.

Primero asegúrese down los servicios existentes para eliminar los volúmenes antiguos.

Luego crea un docker-sync.yml así:

 version: "2" options: # Renamed compose file to `docker-compose.dev.yml` compose-dev-file-path: 'docker-compose.dev.yml' syncs: # This name should be unique and should not clash with # an existing container or service name. You can use it # as a volume in docker compose yml. project: src: '.' sync_excludes: ['node_modules', 'deps', '_build']

Ahora puede usar el volumen del project en lugar de - .:/app para servicios front-end y back- backend , por ejemplo

 volumes: - project:/app:nocopy - elixir-deps:/app/deps - elixir-build:/app/_build - static:/app/priv/static:ro

Ejecute docker-sync start para iniciarlo en segundo plano, luego ejecute docker-compose up --build --detach como de costumbre.

Respuesta original:

Como señaló un comentarista ( @DavidMaze ), actualmente existen problemas de rendimiento conocidos con Docker para Mac. No puedo decir cuánto están vinculados a mi caso de uso, pero después de leer la guía de ajuste de rendimiento en los documentos oficiales, logré hacer algunos progresos en el rendimiento:

docker-compose.yml

 version: "3.6" services: postgres: container_name: postgres image: postgres:11.0-alpine ports: - 5432:5432 volumes: - postgres:/var/lib/postgresql/data front-end: container_name: front-end env_file: - "docker/dev/.env" build: context: "." dockerfile: "docker/dev/Dockerfile.front-end" volumes: - .:/app:delegated - node_modules:/app/node_modules - static:/app/priv/static command: npm run dev backend: container_name: backend build: context: "." dockerfile: "docker/dev/Dockerfile.backend" env_file: - "docker/dev/.env" depends_on: - postgres - front-end ports: - 4000:4000 stdin_open: true tty: true volumes: - .:/app:delegated - elixir-deps:/app/deps - elixir-build:/app/_build - static:/app/priv/static:ro command: iex -S mix phx.server volumes: postgres: elixir-deps: elixir-build: node_modules: static: driver_opts: type: "tmpfs" device: "tmpfs"

Tenga en cuenta el uso de :delegated al declarar los volúmenes . .:/app:delegated .

Aunque esto es una mejora, sigue siendo mucho más lento para el desarrollo diario que ejecutar las cosas de forma nativa, por lo que agradezco otras respuestas a mi pregunta. Por el momento, creo que esa es probablemente la mejor solución.

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!