參考文章:Docker修改hosts
為什么直接在Docker容器內修改hosts文件,不推薦?
hosts文件其實並不是存儲在Docker鏡像中的,/etc/hosts, /etc/resolv.conf和/etc/hostname,是存在主機上的/var/lib/docker/containers/(docker_id)目錄下,容器啟動時是通過mount將這些文件掛載到容器內部的。因此如果在容器中修改這些文件,修改部分不會存在於容器的top layer,而是直接寫入這3個文件中。容器重啟后修改內容不存在的原因是Docker每次創建新容器時,會根據當前docker0下的所有節點的IP信息重新建立hosts文件。也就是說,你的修改會被Docker給自動覆蓋掉。
如何高效的為Docker容器設置hosts?
啟動容器時,加參數
開啟容器時候添加參數–add-host machine:ip可以實現hosts修改
docker run -it --name alpine-test1 --add-host=test.baidu.com:192.168.1.37 docker.io/alpine
在DockerFile中修改
RUN mkdir /data
COPY run.sh /data/
RUN chmod +x /data/run.sh
ENTRYPOINT /bin/sh -c /data/run.sh
run.sh的內容如下:
# 向hosts文件追加內容
#cat /data/myhosts >> /etc/hosts
echo "192.168.1.37 testgitlab.kuaidihelp.com" >> /etc/hosts
# 其他命令
# 保留終端,防止容器自動退出
/bin/sh