不能在docker集装箱中的瓶子应用程序

我一直在试图在Docker容器中创build一个瓶子应用程序。 当通过Flask开发服务器运行时,该应用程序完美运行,包括从networking上的其他机器访问网页。

我一直在试图为应用程序构build一个Docker容器。 问题是我无法访问任何网页。 我得到500个错误。

我的一些设置:

run.py

#!flask_v1/bin/python3 from app import app app.run(debug=True, host='0.0.0.0') 

其中flask_v1是virtualenv目录。

dockerfile

 FROM python:3.4 COPY . /site workdir /site RUN pip install -r requirements.txt ENV NAME sitename CMD ["python", "./run.py"] 

我从这个版本中删除了EXPOSE 5000 ,但是出现同样的问题。 它最初被放置在点子线之下。

requirements.txt

 click==6.7 CouchDB==1.1 docutils==0.14 Flask==0.12.2 Flask-CouchDB==0.2.1 flask-dynamo==0.1.2 Flask-Login==0.4.0 Flask-WTF==0.14.2 itsdangerous==0.24 Jinja2==2.9.6 jmespath==0.9.3 MarkupSafe==1.0 python-dateutil==2.6.1 PyYAML==3.12 s3transfer==0.1.11 six==1.11.0 Werkzeug==0.12.2 WTForms==2.1 

然后我运行build命令如下(用实际名称replacedockername):

 docker build -t dockername . 

build立完成,我运行的图像如下:

 docker run -p 5000:5000 dockername 

尝试连接到localhost:5000 / index(应用程序的“主页”)或localhost:5000或127.0.0.1:5000/index或[host_ip]:5000 / index或[container_ip] :5000 / index都产生了同样的错误:

 Traceback (most recent call last): File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1997, in __call__ return self.wsgi_app(environ, start_response) File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1985, in wsgi_app response = self.handle_exception(e) File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1540, in handle_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise raise value File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1982, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1614, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1517, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise raise value File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1610, in full_dispatch_request rv = self.preprocess_request() File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1831, in preprocess_request rv = func() File "/usr/local/lib/python3.4/site-packages/flaskext/couchdb.py", line 154, in request_start self.sync(current_app) File "/usr/local/lib/python3.4/site-packages/flaskext/couchdb.py", line 131, in sync if db_name not in server: File "/usr/local/lib/python3.4/site-packages/couchdb/client.py", line 96, in __contains__ self.resource.head(name) File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 549, in head return self._request('HEAD', path, headers=headers, **params) File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 581, in _request credentials=self.credentials) File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 289, in request conn = self.connection_pool.get(url) File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 507, in get conn.connect() File "/usr/local/lib/python3.4/http/client.py", line 871, in connect self.timeout, self.source_address) File "/usr/local/lib/python3.4/socket.py", line 516, in create_connection raise err File "/usr/local/lib/python3.4/socket.py", line 507, in create_connection sock.connect(sa) OSError: [Errno 99] Cannot assign requested address 

在阅读了类似于这个的其他一些stackoverflow问题后,我用-d选项运行了容器,并按照如下方式访问了容器:

 docker exec -ti <container name> bash 

一旦进入,使用curl和wget我试图访问localhost:5000 / index。 Wget刚刚抛出了500个错误。 Curl返回Werkzeug页面(参见上面的错误转储),包括所有的html格式。 目录结构看起来很好

我知道我必须有一些configuration不正确。 我只是看不到它是什么。 该应用程序在Docker外部工作,并不在Docker中。 我无法从容器内部访问页面,这告诉我一些关于这个设置的不正确的东西,但是我不知道怎么做,或者没有一个“木头为树”的时刻。 请帮助一个相对的新手。

如果你看错误,首先这是一个应用程序exception。 这意味着你在主机和容器内的绑定都可以工作。 和暴露的端口没有任何关系。

如果我们再看看exception堆栈跟踪

 File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 289, in request conn = self.connection_pool.get(url) File "/usr/local/lib/python3.4/site-packages/couchdb/http.py", line 507, in get conn.connect() File "/usr/local/lib/python3.4/http/client.py", line 871, in connect self.timeout, self.source_address) 

你正在连接到沙发数据库,​​该地址是不正确的,这就是抛出错误在这里。 错误OSError: [Errno 99] Cannot assign requested address有点令人误解,但这是因为您无法连接到可能configuration错误或完全没有运行的Couch DB服务