是否可以将 docker-compose.yml 中的依赖项限制为仅针对本地配置文件?

Can I limit a dependency in docker-compose.yml only for profiles local?

提问人:AGc 提问时间:11/8/2023 更新时间:11/8/2023 访问量:44

问:

对于本地开发,我正在连接到在 VM 的 docker 容器中运行的 SQL Server。但是,对于开发人员,我正在连接到 Azure 服务器。问题是,在我的docker-compose.yml中,对于本地开发,我有一些依赖于 sql-server 的服务,当我想部署到 dev 时,我需要从我的 docker compose 中删除 sql-server 服务,然后我需要删除与它相关的依赖项,因为我不再需要它,因为我正在连接到 Azure。有没有办法限制仅针对本地配置文件的降级 (depends_on)?

这是我想要的,但对我来说听起来像是某种有条件的:

  sql-server:
    image: x
    environment: x
    pw: x
    ports: x
    healthcheck: x
    profiles: -local
  dependant-service:
    depends_on: sql-server ONLY when profiles: - local else it doesn't depend

我目前拥有的解决方案只是复制并拥有一些用于本地的东西和一些用于 htttps 的东西。但是,这看起来不是很好,而且效率也不是很高。

docker-compose 依赖本地

评论

0赞 AymDev 11/8/2023
你是说你知道 Compose 覆盖文件机制,但你不想使用它,因为它“看起来不太好”?
0赞 AGc 11/8/2023
我不知道那是什么。我要说的是,我可以做的是这样的: dependent-service: profiles:https, dependent-service-dublicate-for-local: depends_on: sql-server, profiles:local
0赞 AGc 11/8/2023
我之所以说这看起来不好看,是因为我必须复制近 100 行,这让我觉得也许我做错了什么:)
1赞 AymDev 11/8/2023
好吧,我不熟悉密钥,但我想你可能想阅读有关扩展覆盖的信息。profiles

答:

1赞 Moziii 11/8/2023 #1

在 Docker Compose 中,您可以利用该属性来定义应在哪个配置文件下启动哪些服务。对于您的用例,您可以为您和任何其他只应在本地运行的服务定义配置文件。然后,在部署到开发时,不会激活配置文件,并且不会启动或依赖这些服务。profileslocalsql-serverlocal

对于本地开发:

docker-compose --profile local up

部署到不需要该服务的开发环境时,只需省略以下选项:sql-server--profile local

docker-compose up

这种方法将允许您为不同的环境使用不同的配置,而不会复制大量内容,并允许在文件中清晰地分离关注点。docker-compose.yml

评论

0赞 AGc 11/14/2023
工作,我只是想多了。多谢