postgresql - 无法在新的 Docker 容器上登录 psql
问题描述
我将 Docker Compose 与Docker Hub 上的官方postgres 映像一起使用。运行后docker-compose up
,我进入我的 PostgreSQL 容器并运行psql -U postgres
。但是当我这样做时,我收到以下错误:
bash-5.1# psql -U postgres
psql: error: FATAL: role "postgres" does not exist
这是我的相关部分docker-compose.yml
:
---
# Docker Compose 2.4 is for local development
# https://www.heroku.com/podcasts/codeish/57-discussing-docker-containers-and-kubernetes-with-a-docker-captain - Source on that.
version: '2.4'
services:
postgres:
image: postgres:13.1-alpine
mem_limit: 256m
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- postgresql:/var/lib/postgresql/data:delegated
ports:
- "127.0.0.1:5432:5432"
environment:
PSQL_HISTFILE: /root/log/.psql_history
POSTGRES_USER: my_app
POSTGRES_PASSWORD: pgpassword
restart: on-failure
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 2s
retries: 10
logging:
driver: none
volumes:
postgresql:
storage:
为什么我的postgres
用户没有被创建?
解决方案
您将 postgres 超级用户定义为POSTGRES_USER: my_app
(有关详细信息,请参阅dockerhub 上的自述文件),但尝试使用不存在的用户名postgres
( ) 登录。psql -U postgres
如果我们将其切换到my_app
,它应该可以工作。健康检查也是如此。
或者,我们可以将 设置POSTGRES_USER
为,例如,postgres
或root
(或任何我们想要的)并向容器的目录提供初始化脚本/docker-entrypoint-initdb.d/
。此文件夹中的所有*.sql
脚本将在数据库启动时执行。一种常见的方法是将包含所有脚本的主机目录(例如,创建新角色、创建新数据库以及将新角色所有权赋予该数据库)到该容器目录。可以在我的这个 bitbucket 存储库中找到一个示例。我们可以只关注postgres
容器和postgres
目录,因为它们是重要的部分。
推荐阅读
- haskell - 在haskell中不带括号打印
- php - MYSQL 查询总和
- java - 动态网络项目
- perl - 是否可以在 Selenium 和 LWP::UserAgent 之间共享会话?
- java - 访问B类中的A类字段时Java同步块
- react-native - React Native 中 componentDidUpdate 中的 Animated.timing
- sql - 如何不扫描所有记录以按复杂条件查询顶行
- javascript - 如何将变量传递给子组件,以便它们与 React Router 一起使用?
- python - Pandas:自定义分组功能
- java - 使用地图执行查找