gpt4 book ai didi

docker-compose 启动后运行命令

转载 作者:行者123 更新时间:2023-12-02 19:24:43 27 4
gpt4 key购买 nike

我有以下 docker-compose 文件

version: '3.2'
services:
nd-db:
image: postgres:9.6
ports:
- 5432:5432
volumes:
- type: volume
source: nd-data
target: /var/lib/postgresql/data
- type: volume
source: nd-sql
target: /sql
environment:
- POSTGRES_USER="admin"

nd-app:
image: node-docker
ports:
- 3000:3000
volumes:
- type: volume
source: ndapp-src
target: /src/app
- type: volume
source: ndapp-public
target: /src/public
links:
- nd-db

volumes:
nd-data:
nd-sql:
ndapp-src:
ndapp-public:

nd-app 包含一个 migrations.sql 和seeds.sql 文件。我想在容器启动后运行它们。

如果我手动运行命令,它们看起来像这样
docker exec nd-db psql admin admin -f /sql/migrations.sql
docker exec nd-db psql admin admin -f /sql/seeds.sql

最佳答案

当您运行时 up使用这个 docker-compose 文件,它将为 nd-db 和 nd-app 容器运行容器入口点命令,作为启动它们的一部分。在 nd-db 的情况下,这会做一些准备工作,然后启动 postgres 数据库。

入口点命令在 Dockerfile 中定义,并期望结合 ENTRYPOINT 的配置位和 CMD .您可以做的是覆盖自定义 Dockerfile 中的 ENTRYPOINT 或 overriding它在你的 docker-compose.yml 中。

看着postgres:9.6 Dockerfile ,它有以下两行:

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]

您可以将以下内容添加到 docker-compose.yml 中的 nd-db 配置中以保留现有入口点,但也可以“菊花链”自定义 migration-script.sh步。
entrypoint: ["docker-entrypoint.sh", "migration-script.sh"]

自定义脚本只需要一个特殊的行为:它需要对任何以下参数进行传递执行,因此容器继续启动 postgres:

#!/usr/bin/env bash
set -exo pipefail
psql admin admin -f /sql/migrations.sql
psql admin admin -f /sql/seeds.sql
exec "$@"

关于docker-compose 启动后运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com