I’m trying to get a web server running inside a Docker container. Using Ubuntu 16.04. For the app, I’m just running a Hello World in Flask, per here, named
#!/usr/bin/env python from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello, World!" if __name__ == '__main__': app.run(debug=True)
FROM centos RUN yum install -y epel-release RUN yum -y update RUN yum install -y python python-pip RUN pip install flask RUN mkdir -p /sandbox ADD . /sandbox WORKDIR /sandbox
If I run with
--net host, it works as expected. I can navigate to
localhost:5000 in my browser and see “Hello, World!”.
$ docker run --rm -d --net host flask-image ./app.py
But that exposes all my ports! I’d rather just expose the one I need. If I swap in
-p 5000:5000, I see nothing. Chrome says " This site can’t be reached. The connection was reset."
$ docker run --rm -d --p 5000:5000 flask-image ./app.py
Sure looks to me like the port is being published:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 022fd4a1e40c flask-image "./app.py" 4 minutes ago Up 4 minutes 0.0.0.0:5000->5000/tcp focused_jennings
I have tried switching to a different port, pointing to the container IP address (per
docker inspect), adding
EXPOSE to the Dockerfile, adding
-P to the command line, but no dice. I can’t seem to access that port without
Is this a bug? Am I doing something wrong? Please help!