extra_hosts 无效?如何 在docker build 时修改 hosts

公司项目用的是 docker 环境部署,就遇到一个需要在 docker image 构建阶段修改 hosts 的情况。

比如这样的 dcoker-compose.yml 和 Dockerfile 组合

#dcoker-compose.yml

version: "3.3"

services:
  app-web:
    build: ./
    image: app-web
    ports:
      - 4600:4600
    container_name: "app-web"
#Dockerfile

FROM node:latest

WORKDIR /usr/src/app/
USER root
COPY ./ ./

RUN npm run install && npm run build

CMD ["npm", "run", "start-dev"]

npm run install需要依赖自定义 hosts 的时候,这就尴尬了。

查看 docker 文档,其中提到在 docker-compose.yml 上可以设定 extra_hosts 以拓展 hosts。

test2:
  build: local/test
  extra_hosts:
    - raw.githubusercontent.com:199.232.68.133

但是我怎么测试,都不生效。很神奇 -。-

可以在 Dockerfile 里测试下输出

RUN echo '199.232.68.1 aaa.bb.com' >> /etc/hosts
RUN cat /etc/hosts # 文件被重置,上一行的修改不生效

要解决这个问题,有两个方法:

一、 把hosts修改和安装写在一个 shell 脚本,ADD 到容器,然后执行。

#!/bin/bash
echo '199.232.68.133 aaa.bbb.com' >> /etc/hosts
cat /etc/hosts #生效
npm install

二、 使用 && 操作符在 Dockerfile 同一条 RUN 命令执行

RUN echo '199.232.68.1 aaa.bb.com' >> /etc/hosts && cat /etc/hosts # hosts生效
RUN cat /etc/hosts # 文件被重置,hosts不生效
阅读 589

推荐阅读