postgresql - 将 docker-compose .yml 用于 docker swarm 时如何传递 POSTGRES_USER env 变量

标签 postgresql docker docker-compose docker-swarm

我正在使用 PostgreSQL 镜像启动一个 docker swarm。 我想在该数据库上创建一个名为“numbers”的用户。

这是我的 docker-compose 文件。 .env 文件包含 POSTGRES_USER 和 POSTGRES_PASSORD。如果我通过 ssh 进入托管 postgres 图像的容器,我可以在执行 env 时看到变量。 但是 psql --user numbers 告诉我角色“numbers” 不存在。

我应该如何传递 POSTGRES_* 变量以便创建正确的用户?

version: '3'

services:

  postgres:
    image: 'postgres:9.5'
    env_file:
       - ./.env
    ports:
      - '5432:5432'
    volumes:
      - 'postgres:/var/lib/postgresql/data'
    deploy:
      replicas: 1
    networks:
      - default
    restart: always

这会按预期创建 postgresql 用户。

 $ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_USER=numbers -d postgres

最佳答案

当Postgres发现它的数据目录已经被初始化时,他并没有运行初始化脚本。这是支票:

if [ ! -s "$PGDATA/PG_VERSION" ]; then
....

因此,我建议您手动创建该用户或从头开始(如果负担得起,请删除您的卷,丢失数据)。从命令行:

docker volume ls
docker volume rm <id>

关于postgresql - 将 docker-compose .yml 用于 docker swarm 时如何传递 POSTGRES_USER env 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44198512/

相关文章:

ruby-on-rails - 将数组列更新为 Rails 迁移中另一个文本列的值

docker-compose - 在 docker-compose 中定义 docker 注册表以在具有堆栈部署的群中使用

postgresql - docker-compose - 无法附加到容器

python - PyCharm docker 调试错误

docker - 如何在 Jenkins 声明式管道中从 docker hub 推送和拉取

docker - 无法从 root 构建 docker

php - 从数据库加载图像,跨服务器结果不一致

mysql - 一次查询多项数据校验

c++ - 错误 : no matching function for call to ‘get(long unsigned int*&, long unsigned int&)’ with union_set

docker - Traefik 路由到单个域上的已知和通配符子域