我正在尝试将本地 Ollama 2 模型(在本地计算机上使用端口 11434)与运行 Linux Ubuntu 22.04 的 Docker 容器连接。我可以确认 Ollama 模型绝对有效并且可以通过 http://localhost:11434/ 访问。在我的 Docker 容器中,我还运行 GmailCTL 服务,并且能够成功连接 Google / Gmail API 以从 Google 帐户读取和发送电子邮件。现在我想等待一封电子邮件,让LLM将电子邮件回复给发件人。但是,我无法发布 11434 端口以将模型与容器连接。
我尝试设置 devcontainer.json 文件来转发端口:
{ "name": "therapyGary", "build": { "context": "..", "dockerfile": "../Dockerfile" }, "forwardPorts": [80, 8000, 8080, 11434] }
我尝试在 Dockerfile 中公开端口:
暴露80 曝光 8000 曝光8080 曝光11434`
这些似乎将端口添加到容器中,并且 Docker 知道它们,但是当我检查当前使用的映像的端口状态时,我收到以下消息: “错误:没有为 5ae41009199a 发布公共端口‘11434’”
我还尝试设置 docker-compose.yaml 文件:
services: my_service: image: 53794c7c792c # Replace with your actual Docker image name ports: - "11434:11434" - "8000:8000" - "8080:8080" - "80:80"
但是它似乎有一个问题,任何装有它的容器都会自动停止。
在运行容器之前,我尝试停止 Ollama 模型,以免产生冲突,但这也没有帮助。非常欢迎任何建议。
谢谢!
-- 编辑-- 添加 Dockerfile 代码: 来自 ubuntu:22.04
ENV DEBIAN_FRONTEND=非交互式 ENV GMAILCTL_VERSION=0.10.1
运行 apt-get update && apt-get install -y
蟒蛇3
python3-pip
xdo工具
卷曲
软件属性通用
自由办公室
解压
&& 易于清洁
运行 pip3 install --upgrade pip 运行 pip3 install google-api-python-client google-auth-httplib2 google-auth-oauthlib pandas requests
运行 useradd -ms /bin/bash devuser
RUN mkdir -p /workspace && chown -R devuser:devuser /workspace
用户根目录
工作目录/工作区
复制。 .
RUN chown -R devuser:devuser /workspace
暴露80 曝光 8000 暴露8080 曝光11434
CMD [“bash”]
因此删除
EXPOSE 11434
语句,它的作用是让您使用该端口连接到 docker 容器中的服务。 11434
在您的主机上运行,而不是在您的 Docker 容器上。
要让 docker 容器看到主机上的端口
11434
,您需要使用 host
网络驱动程序,以便它可以看到本地网络上的任何内容。为此,您可以使用 runArgs
参数:
{ "name": "therapyGary",
"build":
{ "context": "..",
"dockerfile": "../Dockerfile"
},
"forwardPorts": [80, 8000, 8080, 11434]
}
会变成
{ "name": "therapyGary",
"build":
{ "context": "..",
"dockerfile": "../Dockerfile"
},
"forwardPorts": [80, 8000, 8080],
"runArgs": ["--net:host"]
}
然后,在您的容器内,您应该能够通过引用容器中的
11434
或 localhost
来联系端口 127.0.0.1
上的 LLM。例如。在netcat nc localhost 11434
。如果您使用的是 Docker Desktop,则需要通过进入 Features in development
中的 Settings
选项卡并选择 Enable host networking
选项来启用主机网络,请参阅此处的文档:Docker Desktop
参考资料: