Mac için Docker kullanıyorum. Docker konteynerinde nodejs tabanlı bir mikro hizmet çalıştırıyorum. Tarayıcı üzerinden düğüm mikro hizmetini test etmek istiyorum. Docker container çalıştırmanın IP adresi nasıl alınır?
Mac için Docker kullanıyorum. Docker konteynerinde nodejs tabanlı bir mikro hizmet çalıştırıyorum. Tarayıcı üzerinden düğüm mikro hizmetini test etmek istiyorum. Docker container çalıştırmanın IP adresi nasıl alınır?
Yanıtlar:
Ana bilgisayarınızdan kapsayıcıya bağlantı noktalarını eşlemek istemiyorsanız, kapsayıcı için doğrudan docker aralığı ipine erişebilirsiniz. Bu aralığa varsayılan olarak yalnızca ana bilgisayarınızdan erişilir. Kapsayıcı ağ verilerinizi şunları yaparak kontrol edebilirsiniz:
docker inspect <containerNameOrId>
Muhtemelen filtrelemek daha iyidir:
docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
Genellikle, varsayılan docker ip aralığı 172.17.0.0/16
. Ana makineniz olmalı 172.17.0.1
ve 172.17.0.2
her şey normalse ve herhangi bir özel ağ seçeneği belirtmediyseniz ilk kapsayıcınız olmalıdır .
EDIT "Bash tricking" yerine docker özelliklerini kullanmanın daha zarif bir yolu:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
localhost
:)
http://172.17.0.2:anyPort
, ana bilgisayardan önerilen yöntemimle yapılabilir . Elbette, ana bilgisayarda localhost kullanarak erişmek istiyorsanız, bağlantı noktalarını eşleştirmelisiniz. OP'nin ne istediğini görecek.
docker run --name struts --rm -i tomcat
2. Konteynırınızın ipini alın (eğer varsa): docker inspect struts | grep '"IPAddress"' | head -n 1
3. Ana bilgisayarın tarayıcısında açın http://x.x.x.x:8080
. Apache Tomcat varsayılan sayfasını görebilirsiniz.
--format
Tüm kapsayıcı bilgisi yerine yalnızca IP adresini almak için seçeneği kullanın :
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Modern docker motorları için şu komutu kullanın:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
ve eski motorlar için şunları kullanın:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
doğrudan konteyner içinde elde etmek istiyorsanız, deneyebilirsiniz
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Benim durumum için, aşağıda Mac'te çalıştı :
Kapsayıcı IP'lerine doğrudan Mac'te erişemedim. localhost
Bağlantı noktası yönlendirmeyle kullanmam gerekiyor , örneğin bağlantı noktası 8000 ise, o zamanhttp://localhost:8000
Bkz. Https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Orijinal yanıt şuydu: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
Bağlantı istasyonunun IP'sine bu ana makinenin dışından erişemezsiniz. Tarayıcınız başka bir makinedeyse, ana bilgisayar bağlantı noktasını konteyner bağlantı noktasına eşlemek -p 8080:8080
için çalıştır komutunu iletmek daha iyidir .
Aktarma -p
, ana bilgisayar bağlantı noktasını kapsayıcı bağlantı noktasına eşleyebilirsiniz ve söz konusu ana bilgisayar bağlantı noktası için tüm trafiği belirlenen kapsayıcı bağlantı noktasına iletmek için bir proxy ayarlanır.