Docker群在容器中执行命令

时间:2019-10-28 20:58:16

标签: postgresql docker docker-compose docker-swarm pg-restore

所以我要设置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之类的东西吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以关注docker映像docs初始化脚本部分):

并在*.sh下创建/docker-entrypoint-initdb.d脚本,当Postgres容器作为Docker服务的一部分运行时,该脚本将运行pg_restore ...

这似乎不是您问题的直接答案,但是它可以实现您在Postgres初始化期间恢复转储的目标。