Flask 应用程序的 Docker-compose——除了用作 Pycharm Interpreter 时工作外

问题描述 投票:0回答:1

我正在尝试在 Windows 10 PC 上使用 docker 为 flask 应用程序构建开发环境。目前,当我正常运行容器时,一切都按预期工作,端点可在与端口映射相对应的本地主机端口 (5000) 上访问。 但是当我在 Pycharm 中使用 docker-compose 作为解释器时,似乎出了点问题,映射端口上没有端点可访问;我只是得到

ERR_CONNECTION_REFUSED
。 在 pycharm 调试器的终端中,我可以使用 curl 访问 flask 应用程序端点,我可以看到应用程序正在正确运行。

docker-compose.yml

version: "3.9"
services:
  archives_app:
    build: .
    restart: unless-stopped
    depends_on:
      - redis
    volumes:
      - .:/app/archives_app
    ports:
      - "5000:5000"
    command: |
      sh -c "
      mount -t cifs -o 'username=${USERNAME},password=${PASSWORD},domain=${DOMAIN},vers=${VERS}' //ppdo-fs05.ppcou.ucsc.edu/Archive_Data /app/Data/Archive_Data
      mount -t cifs -o 'username=${USERNAME},password=${PASSWORD},domain=${DOMAIN},vers=${VERS}' //PPDO-ACT-RECORD.ppcou.ucsc.edu/PPC_Records /app/Data/PPC_Records
      mount -t cifs -o 'username=${USERNAME},password=${PASSWORD},domain=${DOMAIN},vers=${VERS}' //ppdo-fs05.ppcou.ucsc.edu/Cannon_Scans /app/Data/Cannon_Scans
      flask run --host=0.0.0.0 --port=5000 --reload"
    privileged: true
  redis:
    image: "redis:alpine"

Docker文件:

FROM python:3.9-slim-buster
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

# Set up Flask application in development mode
ENV FLASK_ENV=development
ENV FLASK_DEBUG=1

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    libffi-dev \
    libssl-dev \
    libpango1.0-dev \
    pkg-config \
    smbclient \
    nfs-common \
    cifs-utils \
    sudo \
    curl \
    iproute2 \
    iputils-ping

ENV FLASK_APP=run.py

# Set the working directory to /app
WORKDIR /app/archives_app

# Mount the Windows Server shares
RUN mkdir -p /app/Data/Archive_Data
RUN mkdir -p /app/Data/PPC_Records
RUN mkdir -p /app/Data/Cannon_Scans
RUN mkdir -p /app/archives_app

COPY .. .

# Expose port 5000 for the Flask application
EXPOSE 5000

# Install any needed packages specified in requirements.txt
RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install --trusted-host pypi.python.org -r /app/archives_app/requirements.txt

生成的容器网络设置示例:

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "6bf8276108b961d678271bbe82e504bef7518c93823ea660beca5608d3089dff",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5000/tcp": [
                    {
                        "HostIp": "127.0.0.1",
                        "HostPort": "5000"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/6bf8276108b9",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "archives_app_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "archives_app-archives_app-1",
                        "archives_app",
                        "77b0c9c6219e"
                    ],
                    "NetworkID": "ca0adf64ada88dc6002932647f8cb7d20ef63461cc79ce3cbef1d67799e11998",
                    "EndpointID": "5d4365a0cdccadc85c964dfefeb95c5f488ac36ca0a048494c1b3f88c9271489",
                    "Gateway": "192.168.80.1",
                    "IPAddress": "192.168.80.3",
                    "IPPrefixLen": 20,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:50:03",
                    "DriverOpts": null

我主要尝试了不同的端口配置。同样在主机 PC 上,我为端口 5000 制定了监听规则。

类似问题

Pycharm Docker 端口绑定 ...但这是针对 docker,而不是 docker-compose。我容器上的端口也确实设置正确。

将 PyCharm Python 解释器设置为 Docker 使用过时的流程来获取 docker-compose 解释器。不清楚解决方案的哪一部分可以修复我的尝试。

python docker flask docker-compose pycharm
1个回答
0
投票

我理解您在尝试解决此问题时的痛苦,但可能有一些原因导致此问题:

  1. 主机上的防火墙设置:检查以确保 主机上的防火墙不会阻止与端口的连接 5000. 你提到你为端口 5000 制定了一个侦听规则,但要确保该规则没有被其他人覆盖或阻止 防火墙设置。

  2. PyCharm 设置:检查您的 PyCharm 设置以确保 Docker Compose 解释器已正确设置。转到设置> Project > Python Interpreter 并验证解释器是 正确设置为您的 Docker Compose 配置。

  3. 主机IP地址:在docker-compose.ymlports部分, 尝试将主机 IP 地址从 127.0.0.1 更改为 0.0.0.0. 这 将允许来自任何 IP 地址的连接,而不仅仅是本地 机器。

    端口:

    • “0.0.0.0:5000:5000”

进行这些更改后,重新启动 Docker 容器并尝试再次从主机访问 Flask 应用程序。如果您仍然遇到问题,请尝试查看 PyCharm 日志以获取有关该问题的任何其他信息。您可以在 PyCharm 中转到 Help > Show Log in Explorer 找到日志。

最后,您还可以尝试从终端(在 PyCharm 之外)手动执行 docker-compose up,看看问题是否仍然存在。这将帮助您确定问题是与 PyCharm 与 Docker 的集成有关,还是与您的 Docker 设置有关。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.