2017-06-03 57 views
1

我爲一個以標準父文件開頭的apache服務器創建了自己的Dockerfile。參見下面我Dockerfile第一行:關閉Docker從父文件中暴露端口

FROM php:7.0-apache 
EXPOSE 8080 

這位家長暴露的端口80現在有我在Dockerfile暴露的端口8080。只有當我運行它時,兩個端口都是暴露的。

它可以關閉我的Dockerfile中的父端口80?由於我無法編輯該文件。

回答

0

除了告訴碼頭工人暴露的端口,你必須配置Apache監聽8080,做這些兩個版本:

  1. /etc/apache2/ports.conf
  2. 的/ etc/apache2的/ sites-啓用/ 000-default.conf

Dockerfile:

FROM php:7.0-apache 
RUN sed -si 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf 
RUN sed -si 's/VirtualHost .:80/VirtualHost *:8080/' /etc/apache2/sites-enabled/000-default.conf 
EXPOSE 8080 

然後:

docker run -d -p 8080:8080 image_name 

編輯:

關於80端口端口未打開,如果你使用以前的命令它不會暴露。如果你沒有看到在docker ps->80符號,端口不外露:

CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS    PORTS       NAMES 
100fbb367226  php7      "docker-php-entryp..." 2 minutes ago  Up 46 seconds  80/tcp, 0.0.0.0:8080->8080/tcp musing_snyder 

和:

▶ docker inspect 100fbb367226 -f "{{json .NetworkSettings.Ports}}" 
{"80/tcp":null,"8080/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]} 
+0

是的,我做了這一點,8080端口工作正常。只有端口80也暴露在父Dockerfile中。我想讓80號港口關閉? – Tom

+0

但請記住,端口80已暴露,但未打開。 – Robert

+0

這是真的,所以也許沒有問題,因爲它背後有它的問題。 – Tom

0

作爲替代方案,而不是搬運工圖像還可以在編輯配置使用端口映射來實現相同的結果。

對於主機端口80泊塢窗圖像中,像這樣的例子映射端口8080:

docker run -d -p 8080:80 image_name

+0

這是真的,但我使用的是Docker-compose,它將是多個apache的內部端口號容器。這樣它就暴露在主機之外。 – Tom