2014-12-08 17 views
13

Tôi có một Dockerfile đơn giản nhưng lệnh RUN đầu tiên (để nối thêm một địa chỉ IP máy chủ đến/etc/hosts) không có tác dụngDocker RUN thêm vào/etc/hosts trong Dockerfile không làm việc

FROM dockerfile/java 
RUN sudo echo "XX.XX.XXX.XXX some.box.com MyFriendlyBoxName" >> /etc/hosts 
ADD ./somejavaapp.jar /tmp/ 
#CMD java -jar /tmp/somejavaapp.jar 
EXPOSE 8280 

tôi xây dựng sử dụng

docker build . 

và sau đó kiểm tra dòng vang RUN đã làm việc sử dụng

sudo docker run -t -i <built image ID> /bin/bash 

tôi sau đó vào thùng chứa nhưng/etc/hosts file chưa được thêm vào. Chạy cùng dòng echo .... trong khi bây giờ trong vùng chứa có hiệu ứng mong muốn

Bất cứ ai có thể cho tôi biết điều gì sai với dockerfile RUN của tôi ...?

+4

Trong Docker '/ etc/hosts' được thực hiện khi chạy (khi bạn sử dụng' docker run'). Những người khác đã sử dụng dnsmasq trong vùng chứa để có các mục bổ sung. Từ 1.2 bạn có thể chỉnh sửa '/ etc/hosts' sau khi chạy, tuy nhiên nó không được lưu trong các cam kết, và nó không thể được thực hiện từ một Dockerfile vì lý do này. –

+0

Cảm ơn câu trả lời của Kevs đã làm việc cho tôi nhưng tôi vẫn nhớ điều này. cổ vũ –

Trả lời

20

Trình cắm sẽ tạo ra /etc/hosts động mỗi lần bạn tạo vùng chứa mới. Vì vậy, nó có thể liên kết những người khác. Bạn có thể sử dụng --add-host tùy chọn:

docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com 
+0

Bingo đã hoạt động hiệu quả. Cảm ơn bạn đã giải thích –

+0

Điều này thật tuyệt vời nhưng dường như tôi không thể tìm thấy tùy chọn này trong API (1.15). – marcinx

+3

Để có nhiều tên trên một IP, hãy thử đặt tên trong ngoặc kép: '--add-host" www.domain.com www.otherdomain.com ": 8.8.8.8' – Stephane

0

Nếu bạn đang cố gắng để duy trì host mục giữa máy chủ và container một cách khác sẽ được quấn lệnh của bạn với một kịch bản shell mà các bản đồ vào --add-host params host của bạn /etc/hosts file:

~/bin/java:

#!/bin/sh 

ADD_HOSTS=$(tail -n +10 /etc/hosts | egrep -v '(^#|^$)' | sed -r 's/^([a-z0-9\.\:]+)\s+(.+)$/--add-host="\2:\1"/g') 

eval docker run \ 
    -it \ 
    --rm \ 
    $ADD_HOSTS \ 
    <image> \ 
    java $* 

return $? 

Rõ ràng thay thế java với bất cứ điều gì bạn đang cố gắng để làm ...

Giải thích; ADD_HOSTS sẽ lấy mọi thứ sau 10 dòng đầu tiên trong máy chủ của bạn '/etc/hosts tệp | xóa nhận xét và dòng trống | sắp xếp lại các mục nhập thành thông số --add-host.

Lý do lấy tất cả mọi thứ sau 10 dòng đầu tiên là loại trừ mục nhập máy chủ cục bộ và ipv6 cho máy chủ lưu trữ của bạn. Bạn có thể cần phải điều chỉnh điều này cho phù hợp với nhu cầu của bạn.

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