![](/img/trans.png)
[英]How can you make the Docker container use the host machine's '/etc/hosts' file?
[英]How can I make /etc/hosts writable by root in a Docker Container? [closed]
我剛開始使用 docker 並且正在配置一個容器。
我無法編輯 /etc/hosts(但需要為我正在開發的某些軟件編輯)。 文件的自動編輯(通過 sudo 或 root)表示它在只讀文件系統上。 文件的手動 (vim) 編輯說它是只讀的,我無法將更改保存為 root(所有者 (root) 的文件權限是 rw)。
但是我可以修改其他文件並在 /etc 中添加文件。
這有什么原因嗎?
我可以更改 Docker 配置以允許編輯 /etc/hosts 嗎?
謝謝
見@Thomas答案:
/ etc / hosts現在可以從Docker 1.2開始寫入。
你可以同時使用這個hack
https://unix.stackexchange.com/questions/57459/how-can-i-override-the-etc-hosts-file-at-user-level
在你的Dockerfile中:
ADD your_hosts_file /tmp/hosts
RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
ENV LD_LIBRARY_PATH /lib-override
/etc/hosts
現在可以從Docker 1.2開始寫入。
來自Docker的博客:
但請注意,在docker構建期間不會保存對這些文件的更改,因此不會在生成的圖像中保留這些更改。 這些更改只會“粘貼”在正在運行的容器中。
這是目前Docker的技術限制,將在https://github.com/dotcloud/docker/issues/2267進一步討論。
它最終會被解除。
現在,您需要解決它,例如使用自定義dnsmasq
服務器。
我最近偶然發現需要在/etc/hosts
文件中添加一個條目(為了使sendmail
正常工作)。
我最終把它作為Dockerfile
的CMD
聲明的一部分,如下所示:
CMD echo "127.0.0.1 noreply.example.com $(hostname)" >> /etc/hosts \
&& sendmailconfig \
&& cron -f
因此它實際上不是圖像的一部分,但在從圖像創建容器后始終可用。
您可以在不更改 /etc/hosts 文件的情況下執行此操作。 只需將extra_hosts添加到您的docker-compose.yml 中,如下例所示:
myapp:
image: docker.io/bitnami/laravel:9
ports:
- 80:8080
extra_hosts:
- "myapp.test:0.0.0.0"
- "subdomain.myapp.test:0.0.0.0"
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.