公司我的项目用的是 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 不失效