【问题标题】:Why isn't Docker Compose honoring my POSTGRES_USER environment variable?为什么 Docker Compose 不支持我的 POSTGRES_USER 环境变量?
【发布时间】:2022-01-27 12:11:11
【问题描述】:

我知道很多问题听起来像这样,而且他们都有相同的答案:删除你的卷以强制它重新初始化。

问题是,我很小心地删除了我的卷,但它每次都错误地旋转容器。

我的 docker-compose.yml

version: "3.1"
services:
  db:
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_PASSWORD=changeme
      - POSTGRES_USER=myuser
    image: postgres

我的过程:

$ docker volume ls
DRIVER   VOLUME NAME
$ docker-compose up -v # or docker-compose up --force-recreate

但它总是创建“postgres”用户而不是myuser。启动时的输出显示它“将由用户'postgres'拥有”,我只能将 docker exec 作为 postgres,而不是我的用户。

说明看起来很简单。我错过了什么,还是这是一个错误?

当你使用上面的 compose 文件时会发生什么?

【问题讨论】:

  • 因为它应该是这样的。请参阅此处postgres image 并阅读POSTGRES_USER 部分。
  • 你的意思是它创建了一个名为“postgres”的数据库用户,还是一个名为“postgres”的Linux用户?据我所知,POSTGRES_USER 变量只控制第一件事,在官方 Docker 镜像中没有办法控制第二件事。
  • 看来您可能根本不需要docker exec。 “在数据库中获取 shell”似乎不是一个普通的用例,如果你这样做,只要文件系统权限匹配,你是什么 Linux 用户就无关紧要了。我不会担心这个用例,只需使用 psql 或语言原生客户端库连接到数据库。

标签: postgresql docker docker-compose


【解决方案1】:

我只能docker exec 作为postgres,而不是myuser

环境变量POSTGRES_USER控制的是数据库用户,而不是linux用户。看看documentation中的Arbitrary --user Notes一章,了解如何更改linux用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2022-01-01
    相关资源
    最近更新 更多