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 初始化期间恢复转储的目标。
所以我正在设置 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 初始化期间恢复转储的目标。