2015-01-07 18 views
8

Düğüm (ExpressJS) uygulamam için bir proxy sunucusu olarak nginx dockerized bir sürümünü kullanmaya çalışıyorum. Kapsayıcı için nginx ve yayınlama noktası 80'e herhangi bir yapılandırma olmadan, varsayılan nginx açılış sayfasını görebiliyorum. Bu yüzden çok çalıştığını biliyorum.Nginx docker kabı ile localhost'taki bir sunucuya nasıl erişirim?

Artık siteler için etkin olan ve proxy_pass localhost:3000 yapılandırmasını içeren dizini bağlayabilirim. Düğüm uygulamam yerel olarak çalışıyor (herhangi bir Docker kapsayıcısında değil) ve onu 3000 numaralı bağlantı noktası üzerinden erişebiliyorum (ör. localhost:3000). Ancak, nginx kapsayıcı çalıştıran, bağlantı noktası 80'e eşlenen ve localhost: 3000'i proxy'lediğimde, çok basit (merhaba dünya) uygulamamı görebileceğimi varsayalım. Bunun yerine 502.

Bir şeyi docker'a iletmem gerekiyor mu? Bu muhtemelen bir nginx yapılandırma hatası mı? Ben this question kullanarak denedi ama yardımcı görünmüyordu

server { 
    listen 0.0.0.0:80; 
    server_name localhost; 

    location/{ 
    proxy_pass http://localhost:3000; 
    } 
} 

: İşte benim nginx yapılandırmasıdır. Tamamen yanlış bir şey yapmadığım sürece.

+0

[Yerel MySQL Sunucusuna Docker ile Bağlanın?] Olası kopyası (http://stackoverflow.com/questions/27556301/connect-to-local-mysql-server-through-docker) – Bryan

+0

Bunu denedim ve işe almak için görünmüyordu. Bunun benzer bir soruyu birçok kez sorduğunu biliyorum ve aldığım 502 hatası da vardı, ama bunların hiçbiri işe yaramadı. İşten eve döndüğümde tekrar kontrol edeceğim. –

+0

DNS ftw, imo. Ev sahibinin bir ismi vardır;) – user2105103

cevap

7

here gösterildiği gibi mevcut IP adresi alabilirsiniz:

ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}' 
bayrağını docker run işaretini kullanarak kullanabilirsiniz:
docker run --add-host localnode:$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print \$2}') ... 

proxypass içinde localhost yerine localnode kullanın.

+0

Bu doğru hatlarda oldu ama benim için tam olarak çalışmadı. Birincisi dizüstü bilgisayarımdan çalışıyorum, bu yüzden ip ayıklama yöntemim açıkça farklıydı. Aynı metodu kullanarak 'en0' değiştirmeyi denedim ama 'addr: 192.xxx.x.xx' ile sonuç almaya devam ettim. Bu yüzden sonunda sadece kodlanmıştı. 'Addr:' bunun sağlanması docker ile çalışmayacak. Yine de teşekkürler. Bu yorumu, bu soruna rastlayan başkaları için yazıyorum. –

+0

Nevermind, 'addr: 'başını kesmek için' sed 'kullandım. Gibi bir sysops adam değilim diyebilirim :) –

1

Evet. Docker'ın ana makinenizi bilmesi gerekiyor. --add-host anahtarıyla bir takma ad ayarlayabilirsiniz. Bir ad "localbox" için bir takma ad oluşturmak için bir * Nix kutusunda, bu olacaktır: boot2docker Açık

docker run my_repo/my_image --add-host=localbox:<host_name>` 

olurdu:

docker run my_repo/my_image --add-host=localbox:192.168.59.3` 

Birlikte "192.168.59.3" yerine gereken yerde boot2docker ip ne olursa olsun döndürür.

Ardından, bu yüzden sadece sizin nginx yapılandırma değiştirmek, takma localbox yoluyla her zaman ana makine erişmek olmalıdır:

location/{ 
    proxy_pass http://localbox:3000; 
} 
İlgili konular