Tidak dapat menulis ke file / etc / hosts dari Dockerfile dengan RUN


9

Saya membuat gambar buruh pelabuhan menggunakan Dockerfile yang cukup sederhana. Di dalam Dockerfile saya memiliki perintah ini:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

Perintah itu sendiri tampaknya baik-baik saja, karena penciptaan gambar tidak berhenti pada titik ini.

Masalahnya adalah ini: Saat menjalankan gambar, garis yang seharusnya telah dimasukkan ke dalam "/ etc / hosts" tidak ada.

Sekarang, saya mencari-cari dan menemukan bahwa sebelum versi 1.2 dari buruh pelabuhan, ada masalah dengan file host di dalam wadah. Dalam kasus saya, saya menggunakan versi 1.5, yang terbaru pada saat ini.

Apakah saya melewatkan sesuatu?

PEMBARUAN 1:

Tampaknya ada banyak masalah untuk ini, baik terbuka maupun tertutup, di halaman github docker.

Jawaban:


12

Ini bekerja pada buruh pelabuhan 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

Caranya adalah dengan menambahkan nama host pada baris yang sama seperti yang Anda gunakan, jika tidak file host akan diatur ulang, karena setiap perintah RUN memulai wadah perantara baru. Misalnya, ini tidak akan berfungsi :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost

1
Terima kasih atas wawasannya! Meskipun benar (saya periksa) dan berguna secara umum, itu tidak ada gunanya bagi saya dalam hal ini. Saya perlu file "host" untuk diisi ketika wadah berjalan.
dlyk1988

2
+1 untuk menjalankan perintah pada baris yang sama
myol

7

Setelah menulis pembaruan untuk pertanyaan saya, saya memutuskan untuk melihat sekali lagi "masalah" yang dibuka di github. Ternyata, solusi telah diterapkan:

docker run ... --add-host='server:0.0.0.0' ...

Menggunakan argumen "--add-host ..." ketika memulai sebuah wadah dimungkinkan untuk memodifikasi file host.


5
Saya ingin dapat melakukan ini dalam membangun sekalipun. Orang yang menjalankan wadah tidak harus tahu tentang host internal. Masuk akal!
samsamm777

Saya echo @ samsamm777. Bertanya-tanya apakah ada cara yang baik untuk melakukan itu?
Jonathan

Ini benar-benar perilaku yang sangat mengejutkan, yang tidak pernah merupakan ide bagus dalam sistem TI.
Torsten Bronger
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.