#!/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服务(均基于阿尔卑斯)我在entrypoint.sh中有上述脚本(已缩短),它被称为graphql服务的dockerfile的一部分。当我在docker-compose中运行容器时,出现以下错误:>
dss-graphql | psql: fe_sendauth: no password supplied
我已经在
PGPASSWORD
容器中设置了postgresql
。 (还要设置POSTGRES_PASSWORD
并添加小节)。
我可以在容器内运行命令psql命令,并将结果作为1
。当从入口点脚本运行相同命令时,它说psql: fe_sendauth: no password supplied
关于此行为的任何想法吗?复制/包括postgresql
docker image entrypoint.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
``
#!/ bin / sh直到nc -vz postgresql 5432&> / dev / null;如果[[$(psql -h postgresql -U postgres -w -tAc“从pg_database中选择1个datname ='devdb'”)“ ='1'],则完成1睡眠,然后...
environment
容器中添加dss-graphql
部分,并包含- PGPASSWORD: "secret"