我已经用谷歌搜索了 2 天,我发现的唯一解决方法是使用 --net=host vs. -p 8081:80 连接到 Web 服务器。我在普通的非 Web 服务器 RH 7 机器上创建了一个基本的 Web 服务器。暴露端口是 80。我编译并启动容器,并复制了 2 个网页。在容器中“curl http://localhost/index.html”写出“Web 服务器正在运行”。外侧卷曲超时,并显示“卷曲:(7) 连接到 localhost:80 失败;连接被拒绝”。所有帖子都说它应该工作,但事实并非如此。
容器创建如下:
docker run -d -v /data/docker_webpage/unit_test/data:/var/www/html/unit_test/data -w /var/www/html/unit_test/data -p 8081:80 --name=d_webserver webserver
我已经完成了 docker inspect d_webserver 并看到了网关”:“172.17.0.1”和“IPAddress”:“172.17.0.2”。curl http://localhost:8081/index.html 或 curl http://172.17。 02:8081/index.html全部失败。只有当我使用
docker run -d -v /data/docker_webpage/unit_test/data:/var/www/html/unit_test/data -w /var/www/html/unit_test/data --net=host --name=d_webserver webserver
它是否按预期工作。从我读过的所有内容来看, -p 8081:80 应该允许我查看网页,但它只是不起作用。没有防火墙,所以这不是问题。有谁知道为什么 8081 不允许我连接到网络服务器?我错过了什么步骤?
另外,我想在我的 PC 上使用 chrome 对 Linux 机器执行 http:xxx.xxx.xxx.xxx:8081/index.html 与在 Linux 机器上运行浏览器。PC chrome 说无法访问 Linux ip。需要一个网关盒,所以这可能是问题所在。有什么办法可以修复 pc chrome 以便它可以通过网关框找到 Linux docker Web 服务器,还是我必须一直在 Linux 框上启动 chrome?如果人们必须通过 ssh 进入盒子并启动浏览器,那么首先制作 docker 网络服务器的意义就有点落空了。
出于安全考虑,我们使用本地存储库。这些是我保存在 rpms 目录中用于安装的 rpm。
rpms $ ls
deltarpm-3.6-3.el7.x86_64.rpm
httpd-2.4.6-97.el7_9.4.x86_64.rpm
yum-utils-1.1.31-54.el7_8.noarch.rpm
Dockerfile:
# Using RHEL 7 base image and Apache Web server
# Version 1
# Pull the rhel image from the local registry
FROM rhel7_base:latest
USER root
MAINTAINER "Group"
# Copy X dependencies that are not available on the local repository to /home/
COPY rpms/*.rpm /home/
# Update image
# Install all the RPMs using yum. First add the pixie repo to grab the rest of the dependencies
# the subscription and signature checking will be turned off for install
RUN cd /home/ && \
yum-config-manager --add-repo http://xxx.xxx.xxx.xxx/repos/rhel7/yumreposd/redhat.repo && \
cat /etc/yum.repos.d/redhat.repo && \
yum update --disableplugin=subscription-manager --nogpgcheck -y && rm -rf /var/cache/yum && \
yum install --disableplugin=subscription-manager --nogpgcheck *.rpm -y && rm -rf /var/cache/yum && \
rm *.rpm
# Copy test web page directory into container at /var/www/html.
COPY unit_test/ /var/www/html/unit_test/
# Add default Web page and expose port for testing
RUN echo "The Web Server is Running" > /var/www/html/index.html
EXPOSE 80
# Start the service
CMD ["-D", "FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]
我以这种方式构建它然后启动它,我应该能够连接到端口 8081,但 curl 失败。
docker build -t="webserver" .
docker run -d -v /data/docker_webpage/unit_test/data:/var/www/html/unit_test/data -w /var/www/html/unit_test/data -p 8081:80 --name=d_webserver webserver
curl http://localhost/index.html (time out)
curl http://localhost:8081/index.html (time out)
curl http://172.17.0.2:8081/index.html (time out)
curl http://172.17.0.2/index.html (time out)