【发布时间】:2018-04-27 14:00:21
【问题描述】:
这个问题和这个有关:Docker - How can run the psql command in the postgres container?
但上面提供的解决方案仅在您手动执行操作时才有效,而这里希望使用 docker-compose 自动执行操作。
所以这个 docker 容器可以工作:
FROM postgres
COPY init.sql /docker-entrypoint-initdb.d/
但是这个 docker 容器失败了:
FROM postgres
RUN psql -U postgres -c "CREATE USER user WITH PASSWORD 'pass';"
因为在执行 RUN 时,postgresql 服务器还尚未启动!
有没有办法克服这个限制?
【问题讨论】:
-
是的,但是您必须添加在容器启动时启动的脚本(而不是最后一个
CMD ["postgres"]命令),并且此脚本将运行 psql 命令并以“exec postgres”结尾。 -
@JosMac 我不明白你的意思。您所指的最后一个
CMD["postgres"]命令是自动调用的吗?并插入exec postgreswhere?...一个例子会有所帮助 -
@GeorgiosPligoropoulos 您是否检查过这里的问题是否符合您的需求? How to create User/Database in script for Docker Postgres
-
@tgogos 恐怕这没有帮助,因为有关于如何手动执行事物的说明,而显然这里需要的是让事物在 docker 中运行。归根结底,我们应该从命令行运行的只是
docker-compose up -d。并且所有步骤,创建数据库等都应该自动运行。希望这能提供更清晰的画面
标签: postgresql docker docker-compose dockerfile