2016-11-01 99 views
0

有沒有辦法在nginx docker文件中禁用默認EXPOSE 80 443指令而不創建自己的圖像?Docker Nginx禁用默認暴露端口80

我使用DockerNginx形象,試圖揭露 443端口以下列方式:

docker run -itd --name=nginx-test --publish=443:443 nginx 

但我可以看到使用docker ps -a,容器暴露的端口80,以及:

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS          NAMES 
ddc0bca08acc  nginx    "nginx -g 'daemon off" 17 seconds ago  Up 16 seconds  80/tcp, 0.0.0.0:443->443/tcp    nginx-test 

我該如何禁用它?

回答

1

expose instruction位於構建映像的docker文件中。 您需要爲此創建自己的自定義圖像。

要完成這項工作: 首先找到dockerfileofficial nginx (library)

然後編輯dockerfile的expose指令只443

現在使用官方(自定義)dockerfile構建您自己的圖像修改後的圖像。

要回答你的問題編輯:

泊塢窗使用iptables的,雖然你可以手動更新防火牆規則,以使服務在某個端口不可用,您將無法取消綁定泊塢代理。所以端口80仍然會在docker主機和docker代理上被佔用。

+0

我知道它是默認的,有沒有辦法d它沒有創造我自己的形象?用'docker'命令? – TomG

+0

我認爲在這種情況下重建圖像只是爲了暴露端口 –

+0

需要重建圖像,expose命令仍然監聽端口80,但nginx服務將拒絕它'e40ba7e86867 nginx「nginx -g'daemon off」 4秒前上升2秒80/tcp,443/tcp nginx-test ' –

0

根據nginx的泊塢窗圖像的配置,你可以把這個容器開始傳遞一個環境VAR像以前一樣:

docker run -itd -e NGINX_PORT=443 --name=nginx-test nginx 

見:

using environment variables in nginx configuration

然後在你的nginx您可以設置:

listen ${NGINX_PORT}; 
+1

這只是指示nginx服務停止監聽端口80,docker仍然會使用端口主機和docker上的端口80代理仍將端口80重定向到容器 –

+1

只需執行docker ps,您將看到端口80暴露。 'e40ba7e86867 nginx「nginx -g'守護進程關閉」4秒前上傳2秒80/tcp,443/tcp nginx-test ' –

+0

你是對的,但它永遠不會被服務監聽,因爲你正在通過監聽端口443我認爲我不是端口轉發,只是未使用... –