我正在尝试根据Docker Hub上的标准指南运行netbox
,但略有不同的是,当postgres
容器启动时,我需要恢复现有的postgres
转储。
我尝试了一些方法,比如在docker-compose
文件中定义command
选项,比如(还有一些组合(:
sleep 2 && psql -U netbox -f netbox.sql
sleep
需要在postgres
服务启动之前阻止psql
命令运行。
或者定义一个执行数据库恢复的bash脚本,但所有这些方法都会导致容器在运行该命令/脚本后退出。
我最后的办法是使用bash分叉,这就是docker-compose
的postgres
片段的样子:
postgres:
image: postgres:13-alpine
env_file: env/postgres.env
command:
- sh
- -c
- (sleep 3 && cd /home && psql -U netbox -f netbox.sql) & su -c postgres postgres
volumes:
- ./my_db:/home/
- netbox-postgres-data:/var/lib/postgresql/data
遗憾的是,这导致:
postgres: could not access the server configuration file
"/var/lib/postgresql/data/postgresql.conf": No such file or directory
如果我省略了docker-compose
的command
部分,容器启动良好,我可以导航并ls
错误消息中的目录,但这不是我真正需要的,因为这个容器将成为生态系统中更大丛林的一部分,之后几乎无法控制它。
可能是我的狂欢分叉,还是问题出在其他地方?
提前感谢
我能够通过浏览David Maze在评论中分享的线程来找到解决方案。
在我的情况下,将*.sql
文件放在/docker-entrypoint-initdb.d
中不起作用,但我编写了一个bash
脚本,将其放在/docker-entrypoint-initdb.d
目录中,它被触发了。
bash
脚本是一个非常简单的脚本,它将cd
保存到包含sql
转储的目录中,然后通过运行psql
:来恢复它
psql -U netbox -f netbox.sql