【发布时间】:2021-09-04 10:46:40
【问题描述】:
我正在尝试通过在我的计算机上运行 docker-compose up 来运行 Flask 应用程序和 mysql 数据库。烧瓶在 5000 端口上运行。
if __name__ == "__main__":
app.run(port=5000, debug=True)
当我使用docker exec 命令时,docker 容器正常响应。但我无法通过使用 url 得到主机的任何响应:http://localhost:5000。
curl -X GET <url> 命令给出以下输出:
curl: (56) Recv failure: Connection reset by peer
docker ps 命令给出以下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bffa59c471f6 customer_transaction_app "/bin/sh -c 'python …" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp customer_transaction_app_1
ad60c2830ac0 mysql "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:32001->3306/tcp customertransaction_db_host
这里是 Dockerfile:
FROM python:3.8 EXPOSE 5000 COPY requirements.txt /app/requirements.txt WORKDIR /app RUN pip install -r requirements.txt COPY . /app CMD python main.py
这是docker-compose.yml 文件:
version: "2" services: app: build: ./ depends_on: - db ports: - "5000:5000" db: container_name: customertransaction_db_host image: mysql restart: always ports: - "32001:3306" volumes: - customertransaction-db-vol:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: customertransaction_db MYSQL_USER: user MYSQL_PASSWORD: 123456 volumes: customertransaction-db-vol: {}
这两个容器都位于 docker 网络 customer_transaction_default 中。 docker network inspect 命令创建以下输出:
[ { "Name": "customer_transaction_default", "Id": "4b5b20f503af0026a2f1ef185436c9a8e3d9c2ece690e93ece0e6b12f7821edb", "Created": "2021-06-20T17:52:15.603679073+05:30", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.24.0.0/16", "Gateway": "172.24.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "ad60c2830ac0f7e270daf03334ea8a8170200e92c2bc43492c378bd1d89cd3ac": { "Name": "customertransaction_db_host", "EndpointID": "de4597a1f58d711640f71a6169111f9842c7c5d74320825657a2518d07f36504", "MacAddress": "02:42:ac:18:00:02", "IPv4Address": "172.24.0.2/16", "IPv6Address": "" }, "bffa59c471f6762bb802fcee37db356cf2c7a59f4f88192e3546dd10ad9dbb2d": { "Name": "customer_transaction_app_1", "EndpointID": "a3ded03e28343921d799c0efc334034028821c231e1469d4359cd387c7f43f70", "MacAddress": "02:42:ac:18:00:03", "IPv4Address": "172.24.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
【问题讨论】:
-
你能连接到容器内的 Django 应用吗(使用
docker exec)?如果不能,则问题是您的 Django 应用程序未正确启动。 -
烧瓶应用程序运行正常。从使用“docker exec”命令的容器中,当我通过 curl 发送 GET 请求时,我可以从烧瓶应用程序获得正确的响应,并从 MySQL 返回数据。但是从主机我没有得到任何响应。
-
我猜你需要收听
0.0.0.0。见https://flask.palletsprojects.com/en/2.0.x/api/#flask.Flask.run -
谢谢。这样就解决了问题。
标签: mysql docker flask docker-compose docker-networking