Docker swarm 在容器中执行命令

Docker swarm execute command in a container

所以我正在设置 Docker 群。

我现在很喜欢 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 之类的东西?

谢谢

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

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

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