我用PostgreSQL在里面运行并暴露5432端口创建了docker镜像。 这个图像里面没有任何数据库。 Container是一个空的PostgreSQL数据库服务器。
我喜欢(或期间)“docker run”命令:
我不想在容器关闭后保留数据。它只是一个临时开发服务器。
我怀疑可以让我的“docker run”命令字符串很简单/简单。
可能在运行命令中可以使用db / sql / dump挂载一些外部文件夹,然后在容器初始化期间创建db。
完成此任务的最佳/推荐方式和最佳做法是什么?可能有人可以指出我对应的docker示例。
答案 0 :(得分:1)
这是一个很好的问题,可能是其他人多次问自己的问题。
根据docker指南,您不会在RUN命令中执行此操作。取而代之的是,您将在Dockerfile中创建一个ENTRYPOINT或CMD来调用自定义shell脚本,而不是调用postgres进程Direclty。在这种情况下,数据库将在“真实”文件系统中创建,但随后在关闭容器时将其清理。
这将如何工作?容器将启动,照常调用ENTRYPOINT或CMD,并使用初始化脚本来填充数据库。然后,在容器停止的那一刻,将通过信号通知相同的脚本并手动删除数据库内容。
CMD [“ cleanAndRun.sh”]
一个素描脚本“ cleanAndRun.sh”,取自Docker文档,并根据需要进行了修改。请记住,它只是一个草图,需要修改:
#!/bin/sh
# The script that is called in the trap must also stop the DB, so below call to
# dropdb is not enough, it just demonstrates how to call anything in the stop-container scenario!
trap "dropdb <params>" HUP INT QUIT TERM
# init your DB -every- time container starts
<init script to import to clean and import dump>
# start your postgres DB
postgres
echo "exited $0"