0

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

我尝试了一些方法,例如command在文件中定义一个选项docker-compose(以及更多组合):

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

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

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

我最后的手段是使用 bash 分叉,这就是postgres代码片段的docker-compose样子:

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

如果我省略 的command部分docker-compose,容器启动正常,我可以导航和ls错误消息中的目录,但这不是我真正需要的,因为这个容器将继续成为一个更大的生态系统丛林的一部分,几乎没有事后无法控制。

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

提前致谢

4

1 回答 1

0

通过查看David Maze在评论中分享的主题,我能够找到解决方案。

就我而言,将*.sql文件放入其中/docker-entrypoint-initdb.d不起作用,但我编写了一个bash脚本,将其放入/docker-entrypoint-initdb.d目录中并被触发。

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

psql -U netbox -f netbox.sql
于 2021-12-05T15:00:28.510 回答