如何启动具有有效初始设置的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.confpostgresql.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 compress。还有另一种替代解决方案,即使用env变量。您可以在ENVIRONMENT变量中添加所有这些。

最新更新