我为一个以标准父文件开头的apache服务器制作了自己的Dockerfile。请参阅我的Dockerfile中的第一行:
FROM php:7.0-apache
EXPOSE 8080
此父级公开端口80.现在我在Dockerfile中公开了端口8080。只有当我运行它时,两个端口才会暴露。
可以关闭我的Dockerfile中的父端口80吗?因为我无法编辑该文件。
答案 0 :(得分:0)
除了告诉docker公开端口之外,你必须配置apache来监听8080,做这两个版本:
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.如果使用上一个命令,端口不会打开并且不会公开。如果您在->80
中看不到docker ps
符号,则不会公开该端口:
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"}]}
答案 1 :(得分:0)
作为替代方案,您可以使用端口映射来实现相同的结果,而不是编辑docker镜像中的配置。
例如,将主机上的端口8080映射到docker镜像中的端口80,如下所示:
docker run -d -p 8080:80 image_name
答案 2 :(得分:0)
很遗憾,目前尚不可能。
但是您可以follow this issue on Docker's GitHub。它是从2014年开始的,但仍然是 Open 。永远不知道...