我正在尝试在 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 解释器。不清楚解决方案的哪一部分可以修复我的尝试。
我理解您在尝试解决此问题时的痛苦,但可能有一些原因导致此问题:
主机上的防火墙设置:检查以确保 主机上的防火墙不会阻止与端口的连接 5000. 你提到你为端口 5000 制定了一个侦听规则,但要确保该规则没有被其他人覆盖或阻止 防火墙设置。
PyCharm 设置:检查您的 PyCharm 设置以确保 Docker Compose 解释器已正确设置。转到设置> Project > Python Interpreter 并验证解释器是 正确设置为您的 Docker Compose 配置。
主机IP地址:在docker-compose.yml的ports部分, 尝试将主机 IP 地址从 127.0.0.1 更改为 0.0.0.0. 这 将允许来自任何 IP 地址的连接,而不仅仅是本地 机器。
端口:
进行这些更改后,重新启动 Docker 容器并尝试再次从主机访问 Flask 应用程序。如果您仍然遇到问题,请尝试查看 PyCharm 日志以获取有关该问题的任何其他信息。您可以在 PyCharm 中转到 Help > Show Log in Explorer 找到日志。
最后,您还可以尝试从终端(在 PyCharm 之外)手动执行 docker-compose up,看看问题是否仍然存在。这将帮助您确定问题是与 PyCharm 与 Docker 的集成有关,还是与您的 Docker 设置有关。
我希望这有帮助。