2014-11-11 18 views
11

Jestem nowy w Dockerze i próbuję zrozumieć, jaki jest najlepszy sposób wstawienia dokowanego hosta nadrzędnego do pliku hostów kontenera.Wstawianie hosta nadrzędnego hosta ip do pliku hosta kontenera

Używam następujące polecenia w moim Dockerfile

RUN /sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts

ale czasami hosty IP uzyskać zmianę tak jej już nie istotne ...

Powodem tego robić, jeśli zapytać siebie, jest to, że muszę uzyskać dostęp do 2 innych kontenerów dokerów (i link nie oferują tej funkcji).

Dzięki,

+0

Potrzebuję ip hosta stacji dokującej, aby znaleźć się w pliku/etc/hosts. –

+2

Problem nie dotyczy awk, to jest z uruchomieniem polecenia w niewłaściwym czasie. Rodzaj podobny do kompilacji w czasie pracy. – Bryan

+0

Łączenie jest sposobem na osiągnięcie tego celu, ma umożliwić dostęp do innych kontenerów doków. Wyjaśnij lepiej swój przypadek użycia i sposób, w jaki linkowanie nie działa. – Motin

Odpowiedz

12

Opcja --add-host składa w tej sprawie. Tak więc, w poleceniu docker run, zrób coś takiego:

docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [my container] 
+0

Czy jesteś pewien, że argument będzie ważny również po ponownym uruchomieniu komputera, gdy adres IP zmieni się? wygląda na to, że jest ważne tylko dla stworzenia ... –

+0

Ach, masz na myśli, jeśli pozwolisz Dockerowi ponownie uruchomić kontenery przy ponownym uruchomieniu? Tak, to byłby problem. Możesz ponownie uruchomić różne rzeczy - zobacz https://docs.docker.com/articles/host_integration/. Jeśli chcesz, aby schemat dynamiczny rozwiązał adres, może użyjesz DNS? – Bryan

+1

Polecenie '/ sbin/ip route | awk '/ default/{print $ 3}'' działa w hoście dokera, zamiast w kontenerze dokowania, który generuje zły wynik IP. – Santiago

0

--add-host opcja może być używana podczas tworzenia/uruchomić pojemnik ale ponieważ komenda /sbin/ip nie jest dostępna w systemach operacyjnych jak OSX, możemy użyć bardziej ogólnych rozwiązanie:
docker run --add-host=dockerhost:`docker network inspect \ --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [IMAGE]