【发布时间】:2017-01-02 14:09:10
【问题描述】:
我遇到了 docker 问题,我按照官方 docker 教程部署了一个 Web 应用程序(幸运的是,一个 python/flask 应用程序)但是当我尝试部署我的应用程序时,当我来到连接部分时它失败并回复“连接已重置”
代码
import json
import threading
import thread
import io
from flask import Flask, render_template, request
from flask_socketio import SocketIO
# Global variables
app = Flask(__name__)
lock = threading.Semaphore(0)
IOCReplay.lock = lock
async_mode = None
socketio = SocketIO(app)
IOCReplay.socketio = socketio
@app.route("/")
def root():
return render_template('index.html')
@app.route("/dependencies")
def getDependencies():
data = ''
with open('./dependencies.json') as data_file:
data = json.load(data_file)
return json.dumps(data)
if __name__ == "__main__":
socketio.run(app, port=5000)
docker run -d -P guitest:1
6d95689601b8(...)
docker ps
CONTAINER ID IMAGE COMMAND
6d95689601b8 guitest:1 "python test.py"
CREATED STATUS PORTS NAMES
4 seconds ago Up 2 seconds 0.0.0.0:32771->5000/tcp loving_boyd
Dockerfile 没问题。
问题
所以当我登录 0.0.0.0:32771 时,它会显示“连接已重置”
我从 docker FAQ 中看到,要纠正这个问题,我必须“更改 [my] localhost 上的服务配置,以便该服务接受来自所有 IP 的请求”
【问题讨论】:
-
我不是 Mac 用户,但是我们中的一些学生在使用 OS X 时遇到了类似的问题,因为他们使用 docker-machine 来运行应用程序。因此,他们必须使用 docker 机器的 ip 地址来访问应用程序,而不是像 Linux 机器上通常使用的“localhost”,或者如果您安装了本机 docker 客户端。
-
感谢n2o的回复!所以你认为我应该运行一个 docker-machine 而不是常规的 docker 东西,这样我就可以将我的 web 应用程序链接到一个 IP 地址,这样我就可以避免 VM 和主机之间所有 localhost 可能的冲突?
-
不,docker-machine 解决方案相当陈旧,是一种解决方法。使用本机 docker 客户端应该是可行的方法(我认为是“Docker for Mac”)。我不知道您安装了什么,这只是您的问题可能导致的建议。
-
你的烧瓶容器里有输出吗?有哪些错误?您可以使用
docker logs <container-id>或连接到您的容器并查找日志文件。 -
我更新了线程,以便向您展示它会更有用,但问题(或部分问题)来自 socketio.run(app, port) 的不完整或错误参数,所以我添加了socketio.run(app, host='0.0.0.0', port) 但我还删除了 python 使用的所有奇怪的导入,如线程、json。我将尝试逐步添加其他功能,并感谢您提供 docker 日志和一些有关 docker-machine 的信息,这对我来说应该是下一步:p