Tim*_*uka 6 python mongodb flask docker
我在使用 docker 时遇到问题。docker 正在运行,并且主页正在运行。
\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc459b9b1b603 application_web "python -u app.py" 41 seconds ago Up 39 seconds 0.0.0.0:5000->5000/tcp application_web_1\nbc51d72486b0 mongo:3.0.2 "/entrypoint.sh mong\xe2\x80\xa6" 42 seconds ago Up 40 seconds 27017/tcp application_db_1\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我尝试访问一些有 MongoDB 应用程序的页面时,它显示以下内容:
\n\npymongo.errors.ServerSelectionTimeoutError\npymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27017: [Errno 111] Connection refused\nRun Code Online (Sandbox Code Playgroud)\n\nMongoDB 正在我的机器上运行,我可以使用POSTMAN访问。
\n\n这是requirement.txt,docker-compose.yml和Dockerfile配置:
Dockerfile
\n\nFROM python:3.6.1-alpine\nWORKDIR /project\nADD . /project\nRUN pip install -r requirements.txt\nCMD ["python","app.py"]\nRun Code Online (Sandbox Code Playgroud)\n\ndocker-compose.yml
\n\nweb:\n build: .\n command: python -u app.py\n ports:\n - "5000:5000"\n volumes:\n - .:/project\n links:\n - db\ndb:\n image: mongo:3.0.2\nRun Code Online (Sandbox Code Playgroud)\n\n要求.txt
\n\nFlask==1.1.1\nBootstrap-Flask==1.1.0\npymongo==3.9.0\nRun Code Online (Sandbox Code Playgroud)\n\n我使用以下方式构建和运行:
\n\n$ docker-compose build\n$ docker-compose up\nRun Code Online (Sandbox Code Playgroud)\n\n这是我得到的:
\n\nStatus: Downloaded newer image for mongo:3.0.2\nCreating application_db_1 ... done\nCreating application_web_1 ... done\nAttaching to application_db_1, application_web_1\ndb_1 | 2019-10-04T09:57:45.080+0000 I JOURNAL [initandlisten] journal dir=/data/db/journal\ndb_1 | 2019-10-04T09:57:45.081+0000 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed\ndb_1 | 2019-10-04T09:57:45.213+0000 I JOURNAL [durability] Durability thread started\ndb_1 | 2019-10-04T09:57:45.213+0000 I JOURNAL [journal writer] Journal writer thread started\ndb_1 | 2019-10-04T09:57:45.215+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=bc51d72486b0\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] db version v3.0.2\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] git version: 6201872043ecbbc0a4cc169b5482dcf385fc464f\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] build info: Linux ip-10-171-120-232 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION=1_49\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] allocator: tcmalloc\ndb_1 | 2019-10-04T09:57:45.216+0000 I CONTROL [initandlisten] options: {}\ndb_1 | 2019-10-04T09:57:45.216+0000 I INDEX [initandlisten] allocating new ns file /data/db/local.ns, filling with zeroes...\ndb_1 | 2019-10-04T09:57:45.277+0000 I STORAGE [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes...\ndb_1 | 2019-10-04T09:57:45.277+0000 I STORAGE [FileAllocator] creating directory /data/db/_tmp\ndb_1 | 2019-10-04T09:57:45.280+0000 I STORAGE [FileAllocator] done allocating datafile /data/db/local.0, size: 64MB, took 0.001 secs\ndb_1 | 2019-10-04T09:57:45.285+0000 I NETWORK [initandlisten] waiting for connections on port 27017\nweb_1 | * Serving Flask app "app" (lazy loading)\nweb_1 | * Environment: production\nweb_1 | WARNING: This is a development server. Do not use it in a production deployment.\nweb_1 | Use a production WSGI server instead.\nweb_1 | * Debug mode: on\nweb_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)\nweb_1 | * Restarting with stat\nweb_1 | * Debugger is active!\nweb_1 | * Debugger PIN: 328-327-883\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:57:59] "GET / HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:00] "GET /favicon.ico HTTP/1.1" 404 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:31] "GET /objects HTTP/1.1" 500 -\nweb_1 | Traceback (most recent call last):\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2463, in __call__\nweb_1 | return self.wsgi_app(environ, start_response)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2449, in wsgi_app\nweb_1 | response = self.handle_exception(e)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1866, in handle_exception\nweb_1 | reraise(exc_type, exc_value, tb)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise\nweb_1 | raise value\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app\nweb_1 | response = self.full_dispatch_request()\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request\nweb_1 | rv = self.handle_user_exception(e)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception\nweb_1 | reraise(exc_type, exc_value, tb)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise\nweb_1 | raise value\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request\nweb_1 | rv = self.dispatch_request()\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request\nweb_1 | return self.view_functions[rule.endpoint](**req.view_args)\nweb_1 | File "/project/app.py", line 24, in list_objects\nweb_1 | return render_template(\'objects.html\', rows=object_list)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/templating.py", line 140, in render_template\nweb_1 | ctx.app,\nweb_1 | File "/usr/local/lib/python3.6/site-packages/flask/templating.py", line 120, in _render\nweb_1 | rv = template.render(context)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render\nweb_1 | return original_render(self, *args, **kwargs)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render\nweb_1 | return self.environment.handle_exception(exc_info, True)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception\nweb_1 | reraise(exc_type, exc_value, tb)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise\nweb_1 | raise value.with_traceback(tb)\nweb_1 | File "/project/templates/objects.html", line 8, in top-level template code\nweb_1 | {% extends "template.html" %}\nweb_1 | File "/project/templates/template.html", line 46, in top-level template code\nweb_1 | {% block content %}\nweb_1 | File "/project/templates/objects.html", line 28, in block "content"\nweb_1 | {% for row in rows %}\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/cursor.py", line 1156, in next\nweb_1 | if len(self.__data) or self._refresh():\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/cursor.py", line 1050, in _refresh\nweb_1 | self.__session = self.__collection.database.client._ensure_session()\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1807, in _ensure_session\nweb_1 | return self.__start_session(True, causal_consistency=False)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1760, in __start_session\nweb_1 | server_session = self._get_server_session()\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1793, in _get_server_session\nweb_1 | return self._topology.get_server_session()\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/topology.py", line 477, in get_server_session\nweb_1 | None)\nweb_1 | File "/usr/local/lib/python3.6/site-packages/pymongo/topology.py", line 205, in _select_servers_loop\nweb_1 | self._error_message(selector))\nweb_1 | pymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27017: [Errno 111] Connection refused\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:31] "GET /objects?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:31] "GET /objects?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:31] "GET /objects?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:32] "GET /objects?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:32] "GET /objects?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 09:58:32] "GET /objects?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -\nweb_1 | 172.17.0.1 - - [04/Oct/2019 10:00:39] "GET / HTTP/1.0" 200 -\nRun Code Online (Sandbox Code Playgroud)\n
pymongo.errors.ServerSelectionTimeoutError:127.0.0.1:27017:[Errno 111]连接被拒绝
似乎您正在尝试连接localhost容器web。
将应用程序中的连接字符串更新为
client = MongoClient('db', 27017)
Run Code Online (Sandbox Code Playgroud)
另外,删除linkingdocker-compose 创建默认网络,然后您可以引用具有该名称的任何容器。
当 docker-compose 执行 V2 文件时,它将自动在文件中定义的所有容器之间构建网络,并且每个容器只需使用 docker-compose.yml 文件中定义的名称即可立即引用其他容器。
你需要添加depends_on:
web:
build: .
command: python -u app.py
ports:
- "5000:5000"
depends_on:
- db
volumes:
- .:/project
links:
- db
db:
image: mongo:3.0.2
Run Code Online (Sandbox Code Playgroud)
依赖于取决于
服务之间表达依赖关系,服务依赖关系会导致以下行为:
docker-compose up 按依赖顺序启动服务。在以下示例中,db 和 redis 在 web 之前启动。
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |