所以我要设置Docker swarm。
现在,我很高兴使用docker stack deploy -c docker-compose.yml myapp
命令来代替以前的docker-compose up
。
但是我的一项服务是我的数据库,我需要在其中pgrestore
。
以前使用compose,我会运行:
docker-compose run --rm postgres pg_restore --rest-of-command
如何使用stack deploy
做同样的事情?
不幸的是,使用compose创建的容器与stack deploy
中的容器不同:第一个容器称为myapp_postgres
,第二个容器称为myapp_postgres.1.zamd6kb6cy4p8mtfha0gn50vh
。
我想我可以写类似docker exec 035803286af0
的东西,但是然后我放弃了docker-compose.yml
的所有配置好处,在这种情况下是:
postgres:
env_file:
- ./.env
image: postgres:11.0-alpine
volumes:
- "..:/app" # toe make the dump accessible to the container
- "/var/run/postgresql:/var/run/postgresql"
所以这种解决方案不是IaC。
所以没有docker service run
之类的东西吗?
谢谢
答案 0 :(得分:0)
您可以关注docker映像docs(初始化脚本部分):
并在*.sh
下创建/docker-entrypoint-initdb.d
脚本,当Postgres容器作为Docker服务的一部分运行时,该脚本将运行pg_restore ...
。
这似乎不是您问题的直接答案,但是它可以实现您在Postgres初始化期间恢复转储的目标。