Я пытаюсь подключить локальную модель Ollama 2, которая использует порт 11434 на моем локальном компьютере, к моему контейнеру Docker под управлением Linux Ubuntu 22.04. Я могу подтвердить, что модель Олламы определенно работает и доступна через http://localhost:11434/. В моем контейнере Docker я также запускаю службу GmailCTL и смог успешно подключиться к API Google/Gmail для чтения и отправки электронных писем из учетной записи 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"
Но похоже с ним есть проблема, когда любой контейнер с ним автоматически останавливается.
Я попытался остановить модель Олламы перед запуском контейнера, чтобы не создавать конфликт, но это тоже не помогло. Любые предложения очень приветствуются.
Спасибо!
-- редактировать -- добавление кода Dockerfile: ОТ Ubuntu: 22.04
ENV DEBIAN_FRONTEND=неинтерактивный ENV GMAILCTL_VERSION=0.10.1
ЗАПУСК apt-get update && apt-get install -y
питон3
python3-пип
xdotool
локон
общие свойства программного обеспечения
либреофис
разархивируйте
&& apt-получить чистоту
RUN pip3 install --upgrade pip RUN pip3 install google-api-python-client google-auth-httplib2 запросы google-auth-oauthlib pandas
ВЫПОЛНИТЬ useradd -ms /bin/bash devuser
ВЫПОЛНИТЬ mkdir -p /workspace && chown -R devuser:devuser /workspace
Пользователь root
РАБОЧИЙ ДИАПОР /рабочая область
КОПИРОВАТЬ. .
RUN chown -R devuser:devuser /workspace
РАЗВЕРНУТЬ 80 ВЫСТАВКА 8000 ВЫСТАВКА 8080 ВЫСТАВКА 11434
CMD ["баш"]
🤔 А знаете ли вы, что...
Python был создан Гвидо ван Россумом и впервые выпущен в 1991 году.
Поэтому удалите оператор EXPOSE 11434
, он позволит вам подключиться к службе в контейнере докеров, используя этот порт. 11434
работает на вашем хост-компьютере, а не в докер-контейнере.
Чтобы Docker-контейнер мог видеть порт 11434
на вашем хост-компьютере, вам необходимо использовать сетевой драйвер host
, чтобы он мог видеть что угодно в вашей локальной сети. Для этого вы можете использовать параметр runArgs
:
{ "name": "therapyGary",
"build":
{ "context": "..",
"dockerfile": "../Dockerfile"
},
"forwardPorts": [80, 8000, 8080, 11434]
}
станет
{ "name": "therapyGary",
"build":
{ "context": "..",
"dockerfile": "../Dockerfile"
},
"runArgs": ["--net=host"]
}
Затем из вашего контейнера вы сможете связаться с LLM в порту 11434
, указав localhost
или 127.0.0.1
из вашего контейнера. Например. в netcat nc localhost 11434
. Если вы используете Docker Desktop, вам необходимо включить сеть хоста, перейдя на вкладку Features in development
в Settings
и выбрав опцию Enable host networking
, согласно документации здесь: Docker Desktop
Кстати, вы можете использовать --net=host
или --network=host
, оба работают на моем компьютере с Windows 11 и Docker Desktop.
Если вы хотите использовать yaml-файл для создания Docker, вам следует использовать параметр network_mode:
services:
my_service:
image: 53794c7c792c
# Replace with your actual Docker image name
network_mode: "host"
Поскольку вы помещаете контейнер в хост-сеть, нет необходимости раскрывать порты, поскольку это все равно, что подключить контейнер непосредственно к сети. См. Примечание в документации.
Использованная литература:
Особые свойства образа Dev-контейнера
Справочник по сетевому драйверу хоста Docker Engine