Kısa cevap:
EXPOSE
belgelemenin bir yolu
--publish
(veya -p
) bir ana makine bağlantı noktasını çalışan bir konteyner bağlantı noktasına eşlemenin bir yoludur
Bunun altında dikkat edin:
EXPOSE
ile ilgili Dockerfiles
( belgeleme )
--publish
ile ilgili docker run ...
( yürütme / çalışma zamanı )
Portları açığa çıkarma ve yayınlama
Docker ağında, doğrudan ağ bağlantı noktalarını içeren iki farklı mekanizma vardır: bağlantı noktalarını açığa çıkarma ve yayınlama. Bu, varsayılan köprü ağı ve kullanıcı tanımlı köprü ağları için geçerlidir.
Bağlantı noktalarını EXPOSE
Dockerfile'daki anahtar sözcüğü veya --expose
docker çalıştırması için bayrağı kullanarak açığa çıkarırsınız . Bağlantı noktalarını açığa çıkarmak, hangi bağlantı noktalarının kullanıldığını belgelemenin bir yoludur , ancak gerçekte herhangi bir bağlantı noktasını eşlemez veya açmaz . Bağlantı noktalarını göstermek isteğe bağlıdır.
Bağlantı noktalarını --publish
veya --publish-all
işaretini kullanarak yayınlarsınız docker run
. Bu, Docker'a kapsayıcının ağ arabiriminde hangi bağlantı noktalarının açılacağını bildirir. Bir bağlantı noktası yayınlandığında, 30000
çalışma zamanında ana makinede eşlenecek bağlantı noktasını belirtmediğiniz sürece, ana makine üzerindeki kullanılabilir yüksek dereceli bir bağlantı noktasına (daha yüksek ) eşlenir . Görüntüyü oluştururken (Dockerfile dosyasında) ana makinede eşlenecek bağlantı noktasını belirleyemezsiniz, çünkü bağlantı noktasının görüntüyü çalıştırdığınız ana makinede bulunacağını garanti etmenin bir yolu yoktur .
from: Docker konteyner ağı
Ekim 2019'u güncelleyin : yukarıdaki metin artık dokümanlarda değil, arşivlenmiş bir sürüm burada: docs.docker.com/v17.09/engine/userguide/networking/#exposing-and-publishing-ports
Belki şu anki belgeler aşağıdadır:
Yayınlanan bağlantı noktaları
Varsayılan olarak, bir kapsayıcı oluşturduğunuzda, bağlantı noktalarından hiçbirini dış dünyaya yayınlamaz. Bağlantı noktasını Docker dışındaki hizmetlerin veya kabın ağına bağlı olmayan Docker kapsayıcılarının kullanımına sunmak için --publish
veya -p
işaretini kullanın . Bu, bir kapsayıcı bağlantı noktasını Docker ana bilgisayarındaki bir bağlantı noktasına eşleyen bir güvenlik duvarı kuralı oluşturur.
ve burada bulunabilir: docs.docker.com/config/containers/container-networking/#published-ports
Ayrıca,
MARUZ BIRAKMAK
... EXPOSE
Talimat aslında bağlantı noktasını yayınlamıyor . Görüntüyü oluşturan kişi ile kapsayıcıyı çalıştıran kişi arasında, hangi bağlantı noktalarının yayımlanması amaçlandığı arasında bir tür belge işlevi görür .
from: Dockerfile başvurusu
Tanımlanmadığında EXPOSE
/ --publish
tanımlanmadığında hizmet erişimi :
At @Golo Roden en cevabı o belirtilmektedir ::
"Bunlardan herhangi birini belirtmezseniz, kapsayıcıdaki hizmete, kabın kendisinden başka hiçbir yerden erişilemez."
Belki cevap yazılmış ediliyordu anda böyleydi ama şimdi öyle görünüyor ki kullandığınız dahi EXPOSE
ya --publish
, host
ve diğercontainers
aynı ağın o kabın içine başlayabilir bir hizmete erişmek mümkün olacak.
Bu nasıl test edilir:
Aşağıdakileri kullandım Dockerfile
. Temel olarak, ubuntu ile başlıyorum ve küçük bir web sunucusu yüklüyorum:
FROM ubuntu
RUN apt-get update && apt-get install -y mini-httpd
Ben build
görüntü "testexpose" ve run
yeni bir kapsayıcı olarak:
docker run --rm -it testexpose bash
Konteynerin içinde birkaç örnek açtım mini-httpd
:
root@fb8f7dd1322d:/# mini_httpd -p 80
root@fb8f7dd1322d:/# mini_httpd -p 8080
root@fb8f7dd1322d:/# mini_httpd -p 8090
Sonra curl
ana sayfasını almak için ana bilgisayardan veya diğer kapsayıcılar kullanabilirsiniz mini-httpd
.