docker - 无法使用 docker-compose 从本地主机访问 docker 应用程序
问题描述
在我开始之前:我已经搜索了这个问题并实施了“解决方案”,但它没有帮助(将主机设置为 0.0.0.0)。所以,不碍事,
目录结构
|-- osr
| |-- __init__.py
|-- requirements.txt
|-- Dockerfile
|-- docker-compose.yml
Dockerfile:
FROM python:3.7.5-buster
EXPOSE 5000 # i have tried with and without this
ENV INSTALL_PATH /osr
ENV FLASK_APP osr
ENV FLASK_ENV development
RUN mkdir -p $INSTALL_PATH
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [ "flask", "run", "--host=0.0.0.0"]
码头工人-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- '5000:5000'
expose:
- '5000'
volumes:
- .:/osr
__ 初始化 __.py
import os
from flask import Flask
def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev'
)
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
docker-compose 构建网络 docker-compose 运行网络
* Serving Flask app "osr" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 225-441-434
以下所有内容均返回“嗯无法访问此页面”
http://localhost
http://localhost:5000/hello
http://127.0.0.1:5000/hello
我什至尝试过使用
docker exec -it 49e677 bash ip add | grep 全球 inet 172.21.0.2/16 brd 172.21.255.255 范围全球 eth0
http://127.21.0.2:5000/hello # nothing
没有什么。
我确信应用程序本身运行良好,因为我可以直接运行应用程序。
$env:FLASK_APP="osr"
$env:FLASK_ENV="development"
flask run --host=0.0.0.0
它运行良好
编辑:更新
当我通过简单的 Dockerfile 运行它时,我实际上能够到达容器......使用
docker run -it -p 5000:5000 osr_web # docker-compose build 构建的容器
有了这个,我可以通过 localhost:5000/hello 访问端点
所以问题似乎在于通过 docker-compose run 旋转它
这有帮助吗?
更新 2
我发现当我运行 docker ps -a 我可以看到 Docker run 实际上暴露了端口,但 docker-compose run 没有:
解决方案
您确定应用程序本身可以正常工作吗?我试图运行你的 python__init__.py
文件并最终出现错误。
python osr/__init__.py
File "osr/__init__.py", line 11
def hello():
^
IndentationError: unexpected indent
它在修复缩进错误后工作。
@app.route('/hello')
def hello():
return 'Hello, World!'
$ docker run -d -p 5000:5000 harik8/osr:latest
76628f86fecb61c0be4a969d3c91c5c575702ad8063b594a6c1c90b498ea25f1
$ curl http://127.0.0.1:5000/hello
Hello, World!
您不能同时在端口 5000 中运行 docker 和 docker-compose。一次运行一个或更改 docker-compose/dockerfile 主机端口。
$ docker ps -a | grep osr
8b885c4a9654 harik8/osr:latest "flask run --host=0.…" 12 seconds ago Up 11 seconds 0.0.0.0:5000->5000/tcp
$ docker ps -a | grep q5
70f38bf11e26 q5_web "flask run --host=0.…" About a minute ago Up 10 seconds 0.0.0.0:5001->5000/tcp
$ docker ps -a | grep q5
f9f6ba999109 q5_web "flask run --host=0.…" 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp q5_web_1
$ docker ps -a | grep osr
93fb421333e4 harik8/osr:latest "flask run --host=0.…" 18 seconds ago Up 18 seconds 5000/tcp
推荐阅读
- ios - SWIFT:从定义 tableView 到 tableViewCell 的 ViewController 通信数据
- docker - Overlayfs 卷到 docker 容器
- authentication - cakephp 3.8.13 添加 admad/cakephp-jwt-auth
- tensorflow - 如何将一层中的单个神经元与另一层中的单个神经元连接起来
- css - 弹性盒子样式
- c# - 在 Xamarin 中更改布局
- react-native - 将 react-native-web 应用程序嵌入现有网站
- python - 使用循环附加文本
- c++ - 如何找出哪些类/变量使用了 C++ 中的所有内存?
- raspberry-pi - 使用 Linux (Raspberry Pi) 进行 Profibus 同步