docker entrypoint.sh脚本中的psql登录问题

问题描述 投票:0回答:1
#!/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睡眠,然后...

postgresql docker docker-compose alpine
1个回答
0
投票
您可能想尝试在environment容器中添加dss-graphql部分,并包含- PGPASSWORD: "secret"
© www.soinside.com 2019 - 2024. All rights reserved.