Không thể ghi vào / etc / hosts tệp từ Dockerfile bằng RUN


9

Tôi đang tạo một hình ảnh docker bằng Dockerfile khá đơn giản. Bên trong Dockerfile tôi có lệnh này:

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

Lệnh này có vẻ ổn, vì việc tạo hình ảnh không dừng lại ở thời điểm này.

Vấn đề là ở đây: Khi chạy hình ảnh, dòng được cho là đã được chèn vào bên trong "/ etc / hosts" không có ở đó.

Bây giờ, tôi đã tìm kiếm xung quanh và phát hiện ra rằng trước phiên bản 1.2 của docker, đã xảy ra sự cố với tệp máy chủ bên trong các thùng chứa. Trong trường hợp của tôi, tôi đang sử dụng phiên bản 1.5, phiên bản mới nhất tính đến thời điểm này.

Tui bỏ lỡ điều gì vậy?

CẬP NHẬT 1:

Dường như có rất nhiều vấn đề cho việc này, cả mở và đóng, trong các trang github của docker.

Câu trả lời:


12

Điều này hoạt động trên docker 1.7.0

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

Mẹo nhỏ là thêm tên máy chủ trên cùng một dòng khi bạn sử dụng nó, nếu không, tệp máy chủ sẽ được đặt lại, vì mỗi lệnh RUN bắt đầu một thùng chứa trung gian mới. Ví dụ: điều này sẽ không hoạt động :

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

1
Cảm ơn vì sự sáng suốt! Mặc dù chính xác (tôi đã kiểm tra) và nói chung là hữu ích, nhưng nó không có ích gì cho tôi trong trường hợp này. Tôi cần tập tin "hosts" được điền khi container chạy.
dlyk1988

2
+1 để chạy các lệnh trên cùng một dòng
myol

7

Sau khi viết bản cập nhật cho câu hỏi của tôi, tôi quyết định xem xét kỹ hơn các "vấn đề" được mở trong github. Hóa ra, một cách giải quyết đã được thực hiện:

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

Sử dụng đối số "--add-host ..." khi bắt đầu một vùng chứa, có thể sửa đổi tệp máy chủ.


5
Tôi muốn có thể làm điều này trong xây dựng mặc dù. Người chạy container không cần phải biết về máy chủ nội bộ. Làm cho không có ý nghĩa!
samsamm777

Tôi lặp lại @ samsamm777. Tự hỏi nếu có một cách tốt để làm điều đó?
Jonathan

Đây thực sự là hành vi rất đáng ngạc nhiên, điều không bao giờ là một ý tưởng tốt trong các hệ thống CNTT.
Torsten Bronger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.