0

I have been Googling this for 2 days and the only work around I have found is using --net=host vs. -p 8081:80 to connect to the web server. I have create a basic web server on a normal non web server RH 7 box. The expose port is 80. I compile and start the container and 2 web pages are copied in. In the container "curl http://localhost/index.html" writes out "The Web Server is Running". Out side curl times out with "curl: (7) Failed connect to localhost:80; Connection refused". All the post say it should work, but it doesn't.

The container was create as follows:

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

I have done docker inspect d_webserver and see the Gateway": "172.17.0.1" and "IPAddress": "172.17.0.2" are this. curl http://localhost:8081/index.html or curl http://172.17.02:8081/index.html all fail. Only if I use

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

does it work as expected. From all I have read, the -p 8081:80 should allow me to see the web page, but it just doesn't work. There are no firewall up, so that's not the problem. Does anyone know why 8081 is not allowing me to connect to the webserver? What step am I missing?

Also, I would like to use the chrome on my PC to do a http:xxx.xxx.xxx.xxx:8081/index.html to the Linux box vs. running the browser on Linux box. PC chrome says the Linux ip can't be reached. There is a gateway box required so that probably is the problem. Is there someway to fix the pc chrome so it can find the Linux docker web server via gateway box or must I start chrome on the Linux box all the time? Sort of defeats the point of making the docker webserver in the first place if people have to ssh into the box and start up a browser.

We are using local repositories because of security. These are the rpm I saved in rpms directory for install.

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"]

I built it this way and then started it and I should have been able to connect on port 8081, but curl fails.

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)

John K
  • 1
  • 2
  • What's in the `webserver` image; can you edit the question to include its Dockerfile? When you do use `--net=host`, what URL actually works? The `docker inspect` IP address only works in one very specific situation (in your last paragraph, it won't work from another host, for example) and it's usually not necessary to look it up. – David Maze Mar 02 '22 at 00:48
  • Included Dockerfile, see above. IF -net=host is done, curl and firefox can see the web page without any problems. I ran docker inspect to try and verify the docker IP address, post said it might not be localhost all the time. – John K Mar 02 '22 at 17:21
  • How have you configured Apache; what IP address and port does it listen on? When you can successfully connect with `--net=host`, what URL actually works? – David Maze Mar 02 '22 at 18:33
  • When --net=host is used, all curl and firefox http:// work as I listed above. I have not configured Apache beyond the install. I have not seem any instructions that any configuration was needed beyond exposing port 80. You you see above in the Dockerfile is all I am doing. – John K Mar 03 '22 at 14:31

0 Answers0