Estoy trabajando con 3 Servicios:
El Dockerfile para api-knotain tiene el siguiente aspecto
FROM node:latest # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm ci --only=production # Bundle app source COPY . . CMD [ "npm", "start" ]mi archivo docker-compose como tal:
version: '3.3' services: api-knotain: container_name: api-knotain restart: always build: ../notify.apiV2/src ports: - "7777:7777" links: - api-mongo - api-redis environment: - REDIS_URI=api-redis - REDIS_PORT=32770 - MONGO_URI=api-mongo - MONGO_PORT=27017 - RESEED=true - NODE_TLS_REJECT_UNAUTHORIZED=0 api-mongo: container_name: api-mongo image: mongo volumes: - ./data:/data/db ports: - "27017:27017" api-redis: container_name: api-redis image: "redis:alpine" ports: - "32770:32770"corriendo
producción:
api-knotain | connecting mongo ...: mongodb://api-mongo:27017/notify api-knotain | Redis error: Error: Redis connection to api-redis:32770 failed - connect ECONNREFUSED 172.21.0.2:32770 api-knotain | mongo error:MongoNetworkError: failed to connect to server [api-mongo:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 172.21.0.3:27017] api-knotain | Example app listening on port 7777!ni mongo ni redis se pueden conectar. Intenté las siguientes cosas:
siempre con el mismo resultado
Nota:
¿Qué me estoy perdiendo?
Probablemente los contenedores redis y mongo comiencen más tarde que su aplicación y, por lo tanto, su aplicación no los verá. Para contrarrestar esto, debe esperar a que esos servicios estén listos.
También los enlaces son una característica heredada de Docker . Debe usar depend_on para controlar el orden de inicio y las redes definidas por el usuario si desea aislar su base de datos y los contenedores redis de la red externa.
version: '3.3' services: api-knotain: depends_on: - api-mongo - api-redis container_name: api-knotain restart: always build: ../notify.apiV2/src ports: - "7777:7777" links: - api-mongo - api-redis environment: - REDIS_URI=api-redis - REDIS_PORT=32770 - MONGO_URI=api-mongo - MONGO_PORT=27017 - RESEED=true - NODE_TLS_REJECT_UNAUTHORIZED=0 api-mongo: container_name: api-mongo image: mongo volumes: - ./data:/data/db ports: - "27017:27017" api-redis: container_name: api-redis image: "redis:alpine" ports: - "32770:32770"Parece que depend_on no funcionó correctamente en la versión 3.3 de docker compose. después de actualizar la versión a 3.7, todo funciona perfectamente sin cambios en el archivo de redacción.