docker build加--add-host成功,docker-compose用extra_hosts构建失败怎么办
问题原因
你在docker-compose中配置的extra_hosts属于容器运行时配置,仅在容器启动后生效。而pip install custom_package是Dockerfile构建阶段执行的命令,构建过程中无法读取到运行时的hosts配置,因此无法解析无公共DNS记录的nexus.corp.com域名,导致依赖安装失败。
你之前直接使用docker build命令时添加的--add-host参数是直接给构建阶段注入hosts规则,所以可以正常执行。
解决方案
方案1(推荐,docker-compose版本≥3.3)
docker-compose从3.3版本开始支持build层级下的extra_hosts配置,专门用于给构建阶段注入hosts规则,修改docker-compose配置如下即可:
version: "3.3" services: app: build: context: . # 放在build层级,构建阶段生效 extra_hosts: - "nexus.corp.com:1.2.3.4" # 如果运行时也需要访问该域名,保留该配置,不需要可删除 extra_hosts: - "nexus.corp.com:1.2.3.4" command: > sh -c "ping -c 4 nexus.corp.com"
修改后直接执行docker-compose build --no-cache即可正常构建。
方案2(适配旧版本docker-compose)
如果使用的docker-compose版本低于3.3,可以在执行构建命令时手动传入--add-host参数:
docker-compose build --add-host nexus.corp.com:1.2.3.4 --no-cache
验证方法
可以在Dockerfile的RUN pip3 install custom_package命令前添加一行RUN ping -c 4 nexus.corp.com,重新构建如果能正常输出ping的结果,说明hosts配置已经在构建阶段生效。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

