postgresql - 如何启动具有有效初始设置的 postgres docker 容器?
问题描述
将 postgres docker 配置文件设置为
Dockerfile
FROM postgres:12-alpine
USER postgres
RUN chmod 0700 /var/lib/postgresql/data &&\
initdb /var/lib/postgresql/data &&\
echo "host all all 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf &&\
echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf
pg_ctl start &&\
psql -c "ALTER USER postgres WITH ENCRYPTED PASSWORD 'mypassword';"
EXPOSE 5432
使用 docker-compose 将其部署在服务器上
version: "3.8"
services:
postgresql:
build:
context: ./postgresql
dockerfile: Dockerfile
image: postgresql
container_name: postgresql
hostname: postgresql
构建它时,它可以成功完成。但是当它上升时,得到了
docker-compose up postgresql
Creating postgresql ... done
Attaching to postgresql
postgresql | Error: Database is uninitialized and superuser password is not specified.
postgresql | You must specify POSTGRES_PASSWORD to a non-empty value for the
postgresql | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
postgresql |
postgresql | You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
postgresql | connections without a password. This is *not* recommended.
postgresql |
postgresql | See PostgreSQL documentation about "trust":
postgresql | https://www.postgresql.org/docs/current/auth-trust.html
postgresql exited with code 1
查看docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1lsls201qs0h postgresql "docker-entrypoint.s…" 2 minutes ago Exited (1) 2 minutes ago postgresql
服务器上的文件权限
ls -la postgresql/
Total 4
drwxr-xr-x 2 runuser runuser 24 April 14 01:02 .
drwxr-xr-x 5 runuser runuser 54 April 14 01:02 ..
-rwxr-xr-x 1 runuser runuser 541 April 14 01:02 Dockerfile
ls -la docker-compose.yaml
-rwxr-xr-x 1 runuser runuser 1110 April 14 01:02 docker-compose.yaml
我在本地测试了它,它可以工作。容器可以正常运行,初始密码设置也可以。但是在服务器上,是否应该更改任何权限?
解决方案
您不需要通过修改 postgress dockerfile 来创建镜像。只需下载镜像并运行镜像。编写您自己的单独pg_hba.conf
并将postgresql.conf
其保存到主机目录。现在在容器运行时挂载该目录。检查卷并将其添加到 docker compose。
volume:
- host_directory_that_contains_conf/pg_hba.conf: /var/lib/postgresql/data/pg_hba.conf
- host_directory_that_contains_conf/postgresql.conf: /var/lib/postgresql/data/postgresql.conf
在你的 docker-compose 中添加这个卷并运行 docker compose up。还有另一种使用 env 变量的替代解决方案。您可以将所有这些添加到 ENVIRONMENT 变量中。
推荐阅读
- ionic-framework - 使用 mysql 数据库在 ionic 中托管 PWA
- django - 如何修复分配前引用的错误局部变量“ListQuery”
- azure - 无法将机器人发布到 cortana 频道
- firebase - 如何对 Firebase 身份验证电子邮件更改做出反应
- sqlite - 在 Xamarin.iOS 中使用带有 SQLite 的 EntityFramework Core 时出错
- angular - 如何缓存在 Angular PWA 中加载的 iframe 的内容?
- javascript - 登陆页面不断以快递形式返回静态文件
- python-3.x - 如何在 Python 中的误差线图中添加多个值?
- c# - 如何使用 Mongodb C# 驱动程序加入多个集合
- obiee - RCOUNT(1) 如何在 OBIEE 中工作?