gpt4 book ai didi

postgresql - 无法在 docker 中为 postgres 添加架构

转载 作者:行者123 更新时间:2023-11-29 12:33:04 26 4
gpt4 key购买 nike

我正在尝试在包含 nginx、postgresql 和 php-fpm 的 Docker 中构建一个 debian 镜像。我已经设法让 nginx 和 php-fpm 工作了。 Postgres 也在工作,但我无法将模式添加到我创建的数据库中。

Dockerfile 中与 postgres 相关的代码(从 docker 网站获取)如下:

# Add database
RUN apt-get update && apt-get install -y postgresql-9.4 postgresql-client-9.4 postgresql-contrib-9.4
# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.4`` package when it was ``apt-get installed``
USER postgres

# Create a PostgreSQL role named ``use_name`` with ``user_password`` as the password and
# then create a database `database_name` owned by the ``use_name`` role.
# Note: here we use ``&&\`` to run commands one after the other - the ``\``
# allows the RUN command to span multiple lines.
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER user_name WITH SUPERUSER PASSWORD 'user_password';" &&\
createdb -O user_name database_name

# Adjust PostgreSQL configuration so that remote connections to the
# database are possible.
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.4/main/pg_hba.conf

# And add ``listen_addresses`` to ``/etc/postgresql/9.4/main/postgresql.conf``
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.4/main/postgresql.conf

# Reload postgres configuration
RUN /etc/init.d/postgresql stop && /etc/init.d/postgresql start

# Add database schema
COPY ./postgresql/database_name.sql /tmp/database_name.sql
RUN psql -U use_name -d database_name -a -f /tmp/database_name.sql

我得到的错误是

psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

还有其他我没见过的方法吗?我需要做更多的事情吗

最佳答案

您无法连接到服务器的原因是它没有运行。 Dockerfile 中的每一行都在一个新容器中处理,因此任何旧进程都不再运行,但对文件系统的更改将持续存在(前提是它们不是对卷进行的)。

您可以在与 psql 命令相同的 RUN 指令中启动数据库,但通常这种事情会在 ENTRYPOINTCMD< 中完成 容器启动时运行的脚本。

到目前为止,最好的计划是按照@h3nrik 的建议并使用官方postgres 图像。即使您不想这样做,也值得查看用于构建官方镜像的 Dockerfile 和脚本(例如 https://github.com/docker-library/postgres/tree/master/9.5),以了解它们如何解决相同的问题。

关于postgresql - 无法在 docker 中为 postgres 添加架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com