Docker Compose运行指定服务为何报错缺失其他服务依赖的env文件
问题原因
docker-compose 执行任意命令前,都会先完成全量配置解析、合法性校验流程,该流程会扫描docker-compose.yaml中定义的所有服务的所有配置项,而非仅解析你指定运行的目标服务配置。
你虽然仅需要启动node服务,但校验阶段读取到node2服务配置中声明的env_file: .env.another时,会主动检查该文件是否存在,只要文件不存在就会直接抛出错误,不会进入后续的服务启动步骤。
解决方案
方案1:配置env_file为可选(推荐,docker-compose 1.28及以上版本支持)
修改node2服务的env_file配置,将.env.another标记为非必需:
version: "3.3" services: node: entrypoint: "/bin/bash -c" image: node:14.17.4 working_dir: /app/ env_file: - .env node2: entrypoint: "/bin/bash -c" image: node working_dir: /app/ env_file: - .env - path: .env.another required: false
配置后即使.env.another不存在,校验阶段也不会报错。
方案2:使用profiles隔离不常用服务
给node2服务添加profile标记,默认不会加载该服务的配置:
node2: entrypoint: "/bin/bash -c" image: node working_dir: /app/ profiles: ["optional"] env_file: - .env - .env.another
常规启动node服务时不会校验node2的配置,需要启动node2时执行docker-compose --profile optional run node2 "node -v"即可。
方案3:临时注释不需要的服务配置
如果短期内不会用到node2服务,直接注释掉node2的相关配置即可。
内容的提问来源于stack exchange,提问作者Sam Jarman
相关产品推荐
相关产品推荐

