我正在尝试为PostgreSQL数据库创建一个Docker,并导入一些数据到其中。我已经遵循了官方文档。
Dockerfile看起来像这样:
FROM postgres:14.10
#Set env vars
ENV PGDATA=/var/pgdata
ENV POSTGRES_USER=postgres
ENV POSTGRES_PASSWORD=admin
ENV POSTGRES_HOST_AUTH_METHOD=trust
# Copy backup to container
COPY opr.dump /opr.dump
COPY entrypoint2.sh /docker-entrypoint-initdb.d/entrypoint2.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]
字符串
入口点脚本看起来像这样:
#!/bin/bash
set -e
# Create the Postgres database
createdb opr
# Extract the schema and data from the backup file
pg_restore -U postgres -d opr /opr.dump
型
一切正常,但导入数据后,容器停止,无论是在附加和分离模式。我复制了从官方形象的入口点和CMD,但没有成功。
我应该提到的是,我也尝试过不复制ENTRYPOINT和CMD,容器仍然停止。
我的问题是如何让容器在导入数据后不停止?
2条答案
按热度按时间mwyxok5s1#
您只需要将
entrypoint2.sh
脚本复制到docker-entrypoint-initdb.d
目录中,就像the documentation一样(请参阅脚本一节)如果您想在从此映像派生的映像中执行其他初始化,请在/docker-entrypoint-initdb.d [...]下添加一个或多个 .sql、.sql.gz或 *.sh脚本,它将运行任何可执行的 *.sh脚本,并获取该目录中找到的任何不可执行的 *.sh脚本,以便在启动服务之前执行进一步的初始化。
因此,无需覆盖
ENTRYPOINT
和CMD
。编辑:看起来你将不得不这样做后,容器开始,就像大卫迷宫指出。
wwtsj6pe2#
最后,我成功地创建了一个自定义的入口点脚本来完成这个任务。
Dockerfile看起来像这样:
字符串
入口点脚本看起来像这样:
型