#!/bin/sh
until nc -vz postgresql 5432 &>/dev/null; do
sleep 1
done
if [ "$( psql -h postgresql -U postgres -w -tAc "SELECT 1 FROM pg_database WHERE datname='devdb'" )" = '1' ]
then
echo "Database already exists"
else
echo "Running db creation & init routines"
fi
exec "$@"
У меня есть два контейнера 1. postgresql 2. Служба graphql (оба основаны на альпийском языке) У меня есть вышеупомянутый скрипт (сокращенный) в моей точке входа. sh, который вызывается как часть файла dockerfile службы graphql , Когда я запускаю контейнер в docker -compose, я получаю ошибку как
dss-graphql | psql: fe_sendauth: no password supplied
Я установил PGPASSWORD
в контейнере postgresql
. (также установите POSTGRES_PASSWORD
и добавьте меру).
Я могу запустить команду psql внутри контейнера и получить результат как 1
. Когда то же самое запускается из сценария точки входа, он говорит: psql: fe_sendauth: no password supplied
Есть какие-нибудь идеи по поводу этого поведения? копирование / в том числе postgresql
docker точка входа изображения. sh это не то, что я хочу сделать.
version: "3.7"
services:
# postgresql
postgresql :
container_name : postgresql
hostname : postgresql
image : postgres:10-alpine
volumes :
- /var/lib/postgres/data
networks :
- backend
ports :
- 5432:5432
restart : on-failure
env_file :
- database.env
# dss-graphql
dss-graphql :
container_name : dss-graphql
hostname : dss-graphql
build :
dockerfile : dss-graphql.dev.dockerfile
context : ${PWD}/dss-graphql
image : dss-graphql
volumes :
- ${PWD}/dss-graphql:/dss-graphql
- /usr/local/bundle
networks :
- backend
ports :
- 3016:3000
tty : true
stdin_open : true
depends_on :
- postgresql
networks :
backend :
driver: bridge
database.env содержит
POSTGRES_DB=devdb
PGUSER=postgres
PGPASSWORD=secret
POSTGRES_USER=postgres
POSTGRES_PASSWORD=secret
``