Kli*_*mbo 7 postgresql environment-variables docker docker-compose
Docker PostgresQL 文档中有一条消息:
警告:只有当您使用空数据目录启动容器时,Docker 特定变量才会生效;容器启动时任何预先存在的数据库都将保持不变。
docker-compose down
因此,当我使用and重新创建 postgres 容器时docker-compose up -d --remove-orphans
,它会抛出如下错误:
致命:用户“myuser”的密码身份验证失败
发生这种情况是因为 postgres 看到存在该卷,因此它会跳过所有脚本和 .env 文件(我在其中设置POSTGRES_USER
和POSTGRES_PASSWORD
)。
如何解决这个问题?(我的意思是每次重新创建 postgres 容器时都从 .env 文件提供变量)
ps 我不可能删除旧卷,因为我那里有数据。
这是我的docker-compose.yml
文件:
postgres:
image: postgres:alpine
restart: always
expose:
- 5432
volumes:
- "./init/postgres:/docker-entrypoint-initdb.d"
- "./data/postgres_data:/var/lib/postgresql/data"
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USR}
POSTGRES_PASSWORD: ${POSTGRES_PWD}
Run Code Online (Sandbox Code Playgroud)
我的 .env 文件:
# Postgres
export POSTGRES_USR="someuser"
export POSTGRES_PWD="somepwd"
export POSTGRES_DB="somedb"
export POSTGRES_URL="postgres://${POSTGRES_USR}:${POSTGRES_PWD}@postgres:5432/${POSTGRES_DB}?sslmode=disable"
Run Code Online (Sandbox Code Playgroud)
环境POSTGRES_*
变量用于定义创建和连接数据库的方式。如果您有现有数据库,则需要定义PG*
环境变量以便可以连接到它。
因此,您还应该包含PGPASSWORD
在该.env
文件中,以便为现有集群定义的密码将添加到环境中:
$ cat .env
...
PGPASSWORD="somepwd"
Run Code Online (Sandbox Code Playgroud)
否则,您可以将文件包含.pgpass
在/home/postgres
顺便说一句,该.env
文件应该只是键值对的列表。你不需要export
他们:
$ cat .env
POSTGRES_USER="someuser"
POSTGRES_PASSWORD="somepwd"
POSTGRES_DB="somedb"
POSTGRES_URL="postgres://${POSTGRES_USR}:${POSTGRES_PWD}@postgres:5432/${POSTGRES_DB}?sslmode=disable"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37519 次 |
最近记录: |