2016-10-31 15 views
13

docker API okuyup basit bir kap oluşturmaya ve 1 bağlantı noktası açığa çıkarmaya çalışıyorum. Benim örnekteWindows 10'da Windows için Docker kullanarak kapsayıcı kapsayıcıyı açığa çıkarın

, ben TCP kabın içine portu 9595 dinlemek bir uygulama var ve port 9090 üzerinde dış dünya (kabın yani konak) üzerinden erişmek istiyorum. kabın oluştururken

I "ExposedPorts": { "9595/tcp: {}" } ve "PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] } sahiptir.

Yani, Ana makine http://container_internal_ip:9595'dan erişirim, işe yarıyor! Ancak 9595/tcp -> 0.0.0.0:9090 var docker port containerID çalıştırırken, ben bu liman haritası özelliğini kullanarak bekliyoruz şeydir http://localhost:9090, eriştiklerinde, bu ...

çalışmıyor ve bu when connecting to any IP on the host, at port 9090, forward to the container in port 9595, araçlar gerekir.

Peki, burada sorun nedir? Neden 9090'a bağlanamıyorum?

Açıklamaları takdir ediyorum.

+0

soru bu iyi bir writeup yoktur. En azından docker komutuna, hangi görüntünün kullanıldığına veya Dockerfile'a ihtiyacımız var. Windows kapları veya Linux kapsayıcıları? –

+0

** Docker Remote API ** hangi docker motoruna karşı? Windows kapsayıcıları? Linux konteyner? Bir taban resmi olmayan bir kapsayıcı çalıştıramazsınız. Hangi görüntü ** Docker Remote API ** 'yi nasıl aradınız? Bu bir resfful hakkı mı? Hangi komutu kullandın? ** ENOUGH ** bilgisi vermediğinizde ne sorduğunuzu ** anlayamıyorum. –

+0

Üzgünüm, kaba Carlos olmak istemiyorum, ama yorumlarınız hiçbiri soruyla alakalı değildi. Resmin ne olduğu sorusu için önemli değil. Önemli olan API belgelerine göre, İskele 9090 konteyner dışında maruz ve konteynerin içinde port 9595 eşleştirilmiş ve bu çalışmadığını olması.Netsh, konteyner davranışı veya yapılandırmasında hiçbir şeyi etkilemez. –

cevap

3

kullandığınız liman işçisi komutunu gönderin.

Windows için Docker Toolbox veya Docker kullanıyorsanız, özel bir işlem yapmanız gerekir. localhost'u sorunla karşılaşmadan (kapsayıcınız Linux ise) görmelisiniz. Eğer localhost görmezsiniz ancak kapsayıcı Windows ise

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090 

ve konteyner iç adresi kullanmanız gerekir: Eğer kap dışından görünür olmasını istiyorsanız, Yükseltilmiş Güç Shell ile bu deneyin

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid> 

Referans: https://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

Selamlar

+0

Merhaba Carlos, evet, win10 üzerinde windows beta için en son docker'ı kullanıyorum ve 'docker info'' '' ServerVersion '' iadesi: "1.12.2-cs2-ws-beta" 'Ve Docker API v1.24'e göre (https : //docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#create-a-container) 'PortBindings' gerçekten var. –

+0

Windows için docker için ekstra port yönlendirmesine ihtiyacınız var. Ben –

+0

cevabını güncelleyeceğim Aslında 'docker teftişini kullandım ', nomenklatürdeki farkı açıklıyor. –

2

liman gerçekten ediliyor 'dış dünyaya' beklendiği gibi maruz kaldığında, mevcut pencere ağ sınırlaması nedeniyle geridönüş arabiriminde (localhost veya 127.0.0.1) konteyner ana makinesinin kendisine erişilemez. Konteynır ana bilgisayarında geri döngü arabirimi aracılığıyla erişmeye çalışmak yerine, ağdaki başka bir makineden, ana makine ipini ve kapların açık olduğu bağlantı noktası numarasını kullanarak erişmeye çalışın.

yeterli bilgiye sahip değildir https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/