【发布时间】:2020-04-14 17:13:59
【问题描述】:
我正在使用 Python 3.6 运行 Linux Mint。
我已阅读此处的每个链接,但无法弄清楚哪里出了问题。我正在运行一个简单的烧瓶应用程序,当我在我的机器上本地运行它时它运行良好,但随后使用 Docker 运行它我无法在我的浏览器中访问 IP。
我已将烧瓶应用程序设置为在主机 0.0.0.0 上运行,并使用 app.run(host='0.0.0.0')。
Dockerfile:
FROM python:3.7
RUN mkdir -p /var/app
WORKDIR /var/app
COPY . /var/app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["pytest", "-v", "tests/test_flask_api.py"]
# CMD ["python3", "app.py"]
CMD ["python3", "-m", "Flask", "run", "--host=0.0.0.0"]
docker-compose.yml:
web:
build: ./app
ports:
- "5000:5000"
volumes:
- .:/code
运行命令docker-compose up -d构建并运行容器后,我运行命令docker inspect --format '{{ .NetworkSettings.IPAddress }}'得到容器的IP地址为172.17.0.2。
我尝试通过172.17.0.2:5000 和localhost:5000 访问该站点,但都只是挂起并且无法加载。
最后,我运行docker exec -it restapimma_web_1 /bin/bash 进入容器。然后我运行curl localhost:5000 并能够得到正确的响应。所以烧瓶应用程序在容器内运行,我无法在容器外访问它。
【问题讨论】:
-
你试过暴露5000吗?
-
是的,不过没有帮助。
-
@Sociopath 我通过运行
docker inspect --format '{{ .NetworkSettings.IPAddress }}'获得了docker 容器的IP,即172.17.0.2。但是172.17.0.2:5000不会为我加载。 -
docker IP 只能用于 docker 内的应用程序,但如果您想从 docker 外部访问,请使用主机 IP,即 安装 docker 的机器的 IP
-
@Sociopath 抱歉所有问题,您有运行此命令的命令吗?根据您的描述,
localhost应该可以工作。
标签: python docker flask docker-compose