Docker Compose-集装箱碰撞叉



我正在尝试根据Docker Hub上的标准指南运行netbox,但略有不同的是,当postgres容器启动时,我需要恢复现有的postgres转储。

我尝试了一些方法,比如在docker-compose文件中定义command选项,比如(还有一些组合(:

sleep 2 && psql -U netbox -f netbox.sql

sleep需要在postgres服务启动之前阻止psql命令运行。

或者定义一个执行数据库恢复的bash脚本,但所有这些方法都会导致容器在运行该命令/脚本后退出。

我最后的办法是使用bash分叉,这就是docker-composepostgres片段的样子:

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-composecommand部分,容器启动良好,我可以导航并ls错误消息中的目录,但这不是我真正需要的,因为这个容器将成为生态系统中更大丛林的一部分,之后几乎无法控制它。

可能是我的狂欢分叉,还是问题出在其他地方?

提前感谢

我能够通过浏览David Maze在评论中分享的线程来找到解决方案。

在我的情况下,将*.sql文件放在/docker-entrypoint-initdb.d中不起作用,但我编写了一个bash脚本,将其放在/docker-entrypoint-initdb.d目录中,它被触发了。

bash脚本是一个非常简单的脚本,它将cd保存到包含sql转储的目录中,然后通过运行psql:来恢复它

psql -U netbox -f netbox.sql

最新更新