我正在寻找一种使用 docker-compose 有条件启动服务的方法。这是我的场景:
version: "3"
services:
postgres:
container_name: ecoo-postgres
image: postgis/postgis
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ecoo_db
ports:
- "5432:5432"
smtp4dev:
container_name: ecoo-smtp
image: rnwood/smtp4dev:v3
ports:
- "3010:80"
- "2525:25"
server:
container_name: ecoo-server
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/app/src
- ./test:/app/test
- ./prisma:/app/prisma
depends_on:
- postgres
- smtp4dev
network_mode: "host"
restart: always
我正在 .env 文件中设置环境,并希望 smpt4dev 服务根据 ENV 变量有条件地启动。示例:如果 env="dev",则启动 smpt4dev 服务,否则不启动。
任何想法表示赞赏。
无法根据环境变量有条件地启动服务。
docker compose up
您可以使用docker compose profile在运行时有条件地启动某些服务。例如,如果您要使用如下所示的撰写文件:然后运行
docker compose up
只会启动 postgres 和你的服务器,但运行也会docker compose --profile dev up
启动容器。smtp4dev
或者,您可以安排在变量未设置时退出服务。就像是:
当您运行时
docker compose up
,smtp4dev
容器将退出而不会出现错误,除非ENV
等于dev
。在上述任何一种情况下,您都需要删除
server
容器与smtp4dev
容器之间的依赖关系,因为在许多情况下smtp4dev
容器不会运行。您的应用程序应该妥善处理不可用的 smtp 服务器。如果您觉得确实需要依赖项,您可以
server
使用不同的 来创建两个版本的容器profiles
,并且仅在使用 时才具有依赖项--profile dev
。与您的问题无关,但您现有的
depends_on
指令实际上是禁止操作的。要创建所需的依赖关系类型,您需要 (a) 为目标服务实施运行状况检查,然后 (b)depends_on
在依赖服务中使用 的扩展形式。