将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 compress。还有另一种替代解决方案,即使用env变量。您可以在ENVIRONMENT变量中添加所有这些。