Я получил три контейнера, описанных в docker-compose.yml
- postgres
как база данных, redis
для кэша и основное приложение node
:
version: '3.6'
services:
db:
user: '${UID}:${GID}'
image: postgres:latest
env_file: .env
container_name: ${POSTGRES_CONTAINER}
ports:
- '${POSTGRES_PORT}:5432'
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DB}
PGDATA: /var/lib/postgresql/data/${POSTGRES_DB}
volumes:
- ./data:/var/lib/postgresql/data/${POSTGRES_DB}
- ./init-testdb.sh:/docker-entrypoint-initdb.d/init-testdb.sh:ro
cache:
image: redis:latest
env_file: .env
container_name: ${REDIS_CONTAINER}
sysctls:
net.core.somaxconn: '511'
ports:
- '${REDIS_PORT}:6379'
command: ['--requirepass "secret"']
api:
image: node:latest
env_file: .env
container_name: ${SERVER_CONTAINER}
working_dir: /var/www/app
command: ['npm', 'start']
ports:
- '${SERVER_PORT}:5000'
volumes:
- ./node_modules:/var/www/app/node_modules
- .:/var/www/app
depends_on:
- db
- cache
volumes:
node_modules:
Они запускаются через npm
скрипт в package.json
:
"scripts": {
"dev": "docker-compose up",
"start": "nodemon src/server.js"
}
Приложение node
не видит два других контейнера. Например, подключение к postgres
всегда прерывается, даже если контейнер db запущен нормально. Если я закомментирую приложение node
из docker-compose.yml
и запустлю только дб и кеш, то запусту основное приложение с простым npm start
- все работает как надо.
У меня все хорошо с запуском все это так, docker-compose.yml
только для удобства разработки. Но я хотел бы знать, почему node
не может подключиться к postgres
контейнеру, когда я пытаюсь запустить все три из них через docker-compose.yml
.
Вероятно, это что-то до боли очевидно, но я могу ' Кажется, это понять. Предложения и помощь приветствуются!
Ниже приведен файл .env
, из которого docker
извлекает переменные:
POSTGRES_CONTAINER=boilerplate-db
REDIS_CONTAINER=boilerplate-cache
SERVER_CONTAINER=boilerplate-api
NODE_ENV=development
SERVER_PORT=5000
SERVER_HOSTNAME=localhost
SERVER_PROTOCOL=http
POSTGRES_USER=root
POSTGRES_PASSWORD=secret
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=boilerplate
POSTGRES_TEST_USER=test
POSTGRES_TEST_PASSWORD=test
POSTGRES_TEST_DB=boilerplate_test
REDIS_PORT=6379
REDIS_HOST=localhost
REDIS_PASSWORD=secret