2016-07-11 23 views
19

Tôi muốn cập nhật tệp /etc/hosts trong khi "docker build".Cách cập nhật tệp/etc/hosts trong hình ảnh Docker trong khi "docker build"

Tôi đã thêm dòng dưới đây vào Dockerfile nhưng không cập nhật tệp /etc/hosts hoặc không đưa ra bất kỳ lỗi nào.

RUN echo "192.168.33.11 mynginx" >> /etc/hosts 

Tôi cần cập nhật /etc/hosts. Bất cứ ai có thể đề xuất về điều này?

+0

Bạn đang sử dụng để thực hiện boot2docker Docker của bạn xây dựng? – VonC

+0

Không, tôi đang sử dụng phiên bản Linux của docker 1.8. –

+1

Và khi bạn đang chạy hình ảnh của mình dưới dạng vùng chứa,/etc/hosts của nó không thay đổi? Hay bạn đang giới thiệu máy chủ lưu trữ/etc/hosts Linux của mình? – VonC

Trả lời

22

Với phiên bản mới hơn của Docker, điều này có thể được thực hiện với Docker-soạn và nó extra_hosts directive

Thêm ánh xạ hostname.
Sử dụng các giá trị giống như docker run client --add-host parameter (đã có sẵn cho docker 1.8).

extra_hosts: 
- "somehost:162.242.195.82" 
- "otherhost:50.31.209.229" 

Nói tóm lại: sửa đổi /etc/hosts của container của bạn khi chạy nó, không phải xây dựng nó.

+0

tôi muốn thay đổi/etc/hosts trong hình ảnh docker. –

+0

@PrakashSingh Tôi đồng ý, nhưng điều đó dường như không dễ dàng để làm. – VonC

+0

Không ai đã triển khai trường hợp sử dụng này? –

0

Sau đây làm việc cho tôi bằng cách gắn kết các tập tin trong Docker chạy thay vì Docker xây dựng

docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image> 
5

Bạn không thể sửa đổi file host bằng tiếng vang trong bước RUN vì Docker sẽ duy trì các tập tin khi bạn sẽ bắt đầu nó và nội dung của tập tin sẽ được quản lý bởi docker.

Tuy nhiên sau đây có thể được sử dụng để đạt được như vậy:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ] 

Key để ý ở đây là việc sử dụng các lệnh exec như tài liệu Docker gợi ý. Sử dụng exec sẽ làm cho lệnh java là PID 1 cho vùng chứa. Docker ngắt sẽ chỉ đáp ứng với điều đó.

Xem https://docs.docker.com/engine/reference/builder/#entrypoint

+0

ty! Đây là một giải pháp tuyệt vời – xero

+0

Trong trường hợp bạn đang tìm kiếm giải pháp kubenetes, bạn có thể sử dụng hostAliases. https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ giống như docker soạn extra_hosts. –

-3

Chỉ cần một câu trả lời nhanh để chạy container của bạn sử dụng:

docker exec -it <container name> /bin/bash 

lần container mở cửa:

cd .. 

sau đó

`cd etc` 

và sau đó bạn có thể

cat hosts 

hay:

apt-get update 
apt-get vim 

hoặc bất kỳ trình soạn bạn thích và mở nó trong vim, ở đây bạn có thể sửa đổi nói ip khởi động của bạn để 0.0.0.0

Các vấn đề liên quan