Neden EXPOSE'i Dockerfile'da kullanıyorsunuz - zaten tüm bağlantı noktalarına bağlanabildiğiniz için


23

Bu limanı kabın içine docker run -p 3000:3000 image koymadan yapabilirim EXPOSE(aşağıya bakınız). Eğer bu doğruysa, neden EXPOSE'i Dockerfile'e yerleştirmeyi zahmet ettin? Sadece imaj kullanıcıları ile iletişim kurmak için mi? Çünkü eğer zaten binilebilirlerse, EXPOSE portlarının işlevsel bir nedenini bilmiyorum.


İşte EXPOSEd olmasa da, bir kaptaki bir limana bağlandığımı gösteren adımlar.

$ cat Dockerfile
FROM alpine
RUN apk add nodejs npm vim
COPY webserver /webserver
CMD [ "node", "/webserver/index.js" ]


$ docker build .
Sending build context to Docker daemon  1.931MB
Step 1/4 : FROM alpine
 ---> 11cd0b38bc3c
Step 2/4 : RUN apk add nodejs npm vim
 ---> Using cache
 ---> 4270f8bdb201
Step 3/4 : COPY webserver /webserver
 ---> Using cache
 ---> 67f4cda61ff0
Step 4/4 : CMD [ "node", "/webserver/index.js" ]
 ---> Using cache
 ---> 1df8f9024b85
Successfully built 1df8f9024b85


$ curl localhost:4400
curl: (7) Failed to connect to localhost port 4400: Connection refused


$ docker run -d -p 4400:3000 1df8f9024b85
7d0e6c56f8ad8827fe72830a30c1aac96821104b8ea111291ca39e6536aad8fd


$ curl localhost:4400
Hello World!


$

Yanıtlar:


29

Docker'in EXPOSE belgeleri bu özel noktaya yöneliktir:

EXPOSETalimat aslında noktasını yayınlamaz. Görüntüyü oluşturan kişi ile kabı çalıştıran kişi hakkında, hangi portların yayınlanması gerektiğini belirten bir belge türü olarak işlev görür. Kabı çalıştırırken aslında noktasını yayımlamak için kullanmak -püzerine bayrak docker runyayınlamak ve bir veya daha fazla bağlantı noktalarını harita, ya da -Pbayrak açıktaki tüm portları yayımlamak ve yüksek mertebeden limanlara bunları eşleştirmek için.

Son cümleye dikkat edin, eğer birden fazla port gösterirseniz, komut satırında -Pçoklu ayar yapmaktan kaçınmak faydalı olur -p.


"Belgeleme", resim meta verileri biçimindedir. -PBayrak için faydalı olmasının yanı sıra , diğer yardımcı programlar, çalışan bu kapsayıcıları varsayılan olarak bu açık portları kullanarak yönlendirme kurallarını dinamik olarak güncelleyen proxy'lerde faydalı olan bu meta veriler için sorgu yapabilir.
BMitch

@BMitch kesinlikle, OP için henüz kullanışlı olmayan yabancı bir bilgi olduğunu hissettim, ancak düzenlemek için çekinmeyin.
Tensibai

EXPOSE belgedir
文 文

4

Bu otomasyon uğruna yapılır. docker run -PBir kabı başlatmak için çalışan evrensel bir komutunuz olabilir ve Dockerfile, hangi kabın hangi bağlantı noktasını gösterdiğini belirtmek için kullanılır. Bir boru hattından düzinelerce veya yüzlerce konteyner inşa ediyorsanız, bu oldukça kullanışlıdır. Dockerfile'de bulunmayan dış detayların konteyner ile birlikte boru hattı boyunca aşamadan aşamaya geçirilmesi oldukça zordur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.