公司項目用的是 docker 環境部署,就遇到一個須要在 docker image 構建階段修改 hosts 的狀況。node
好比這樣的 dcoker-compose.yml 和 Dockerfile 組合git
#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 的時候,這就尷尬了。github
查看 docker 文檔,其中提到在 docker-compose.yml 上能夠設定 extra_hosts 以拓展 hosts。web
test2: build: local/test extra_hosts: - raw.githubusercontent.com:199.232.68.133
可是我怎麼測試,都不生效。很神奇 -。- docker
能夠在 Dockerfile 裏測試下輸出shell
RUN echo '199.232.68.1 aaa.bb.com' >> /etc/hosts RUN cat /etc/hosts # 文件被重置,上一行的修改不生效
要解決這個問題,有兩個方法: npm
1、 把hosts修改和安裝寫在一個 shell 腳本,ADD 到容器,而後執行。bash
#!/bin/bash echo '199.232.68.133 aaa.bbb.com' >> /etc/hosts cat /etc/hosts #生效 npm install
2、 使用 && 操做符在 Dockerfile 同一條 RUN 命令執行app
RUN echo '199.232.68.1 aaa.bb.com' >> /etc/hosts && cat /etc/hosts # hosts生效 RUN cat /etc/hosts # 文件被重置,hosts不生效