簡體   English   中英

如何使 Docker 容器中的 /etc/hosts 可由 root 寫入? [關閉]

[英]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 嗎?

謝謝

更新2014-09

見@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正常工作)。

我最終把它作為DockerfileCMD聲明的一部分,如下所示:

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"

參考:

如何將主機名添加到同一 docker.network 上的容器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM