एक ही मशीन पर Docker के साथ दो ओल्लामा प्रो सब्सक्रिप्शन संचित करें
प्रकाशित: 08 May 2026
दो प्रो सब्सक्रिप्शन, एक ही मशीन, एक ही बैंक कार्ड, और शून्य नेटवर्क संघर्ष। Docker ने मुझे कैसे क्लाउड इन्फ़रेंस क्षमता को दोगुना करने की अनुमति दी, बिना दूसरे पीसी को खरीदे।
परिचय
मैं कई महीनों से Ollama Pro का उपयोग करके अपने OpenCode सत्रों को क्लाउड मॉडल से भरता हूँ। यह बात है कि प्रो सब्सक्रिप्शन के बावजूद, हम जल्दी rate limiting से सीमित हो जाते हैं जब हम कई एजेंटों को समानांतर में लॉन्च करते हैं। स्पष्ट समाधान: दूसरा सब्सक्रिप्शन।
लेकिन यहाँ, यह नाटक है।
Ollama प्रत्येक मशीन को एक अद्वितीय SSH कुंजी — उसकी प्रसिद्ध Device Key — से पहचानता है। दो इंस्टेंस एक ही OS पर समान पहचान साझा करेंगे, और उसी डिवाइस पर दो प्रो खातों को जोड़ना असंभव है। और जैसा आप समझते हैं, मैं इसके लिए दूसरा लैपटॉप खरीदने वाला नहीं था।
समाधान: धोखा देना. Ollama को यह विश्वास दिलाना कि वह दो अलग‑अलग मशीनों पर चल रहा है, जबकि वे एक ही CPU, एक ही RAM और एक ही नेटवर्क कनेक्शन साझा करते हैं. Docker हमें एक परिपूर्ण अलगाव का बुलबुला प्रदान करेगा.
@startuml
!theme plain
skinparam BoxPadding 10
skinparam DefaultFontSize 12
left to right direction
node "भौतिक मशीन" {
frame "Ollama इंस्टेंस A (स्थानीय)" as Native {
database "Identity\n/usr/share/ollama/.ollama/id_ed25519" as KeyA
portin "API\n:11434" as PortA
}
frame "Ollama इंस्टेंस B (Docker)" as Docker {
database "Identity\n~/ollama-b-data/id_ed25519" as KeyB
portin "API\n:11435" as PortB
}
}
cloud "Ollama क्लाउड" {
actor "प्रो खाता A\n(ईमेल 1)" as AccountA
actor "प्रो खाता B\n(ईमेल 2)" as AccountB
}
KeyA --> AccountA : "चाबी SSH A"
KeyB --> AccountB : "चाबी SSH B"
PortA --> AccountA : "अनुरोध A"
PortB --> AccountB : "अनुरोध B"
note bottom of Docker
अलग कंटेनर : पहचान SSH विशिष्ट, नेटवर्क पोर्ट विशिष्ट, स्थायी आयतन
end note
@enduml
क्यों दो बार एक ही बात?
मैं मानसिक रूप से बीमार कहने से पहले, मुझे यूज़ केस समझाने दो।
एक प्रो सब्सक्रिप्शन के साथ, मैं एक मॉडल लॉन्च कर सकता हूँ जैसे`deepseek-v4-pro:cloud`एक OpenCode सत्र में। समस्या तब उत्पन्न होती है जब मैं दो समानांतर सत्र चाहता हूँ। दर सीमा कोटे के कारण दूसरा सत्र धीमा हो जाता है या पूरी तरह से अस्वीकार कर दिया जाता है।
दो स्वतंत्र प्रो सदस्यताओं के साथ:
-
सेशन OpenCode 1 → खाता प्रो A`localhost:11434`)
-
सत्र OpenCode 2 → खाता प्रो B`localhost:11435`)
प्रत्येक सत्र का अपना कोटा, अपना संदर्भ होता है, और यह दूसरे को परेशान नहीं करता। यह मानव मल्टी-प्रोसेसिंग है।
|
दो प्रो सब्सक्रिप्शन = दो अलग‑अलग ईमेल। समान बैंक कार्ड काम करती है — Ollama भुगतान प्रणाली एक ही भुगतान साधन से कई सब्सक्रिप्शन को ब्लॉक नहीं करती। मैंने जाँच की। |
समस्या का हृदय: डिवाइस की कुंजी
जब आप Ollama स्थापित करते हैं, तो एक SSH ed25519 कुंजी जोड़ी पहचान निर्देशिका में बनाई जाती है:
$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...
यह कुंजी Ollama के सर्वरों पर अपलोड की जाती है इस दौरान`ollama signin`. वह कहती है « यह मशीन Pro खाते से संबंधित है » यदि आपके दो इंस्टेंसेस एक ही फ़ाइल साझा करते हैं`id_ed25519`, वे एक ही पहचान साझा करते हैं। गेम खत्म।
परेड : अपनी दूसरी इकाई को अपना व्यक्तिगत पहचान निर्देशिका दें, जो डॉकर वॉल्यूम में अलग हो।
स्थापना — चरण दर चरण
पूर्वापेक्षा
-
एक कार्यात्मक नेटिव Ollama इंस्टॉलेशन (आधिकारिक स्क्रिप्ट`curl | sh`)
-
डॉकर स्थापित और कार्यात्मक
-
पोर्टेनियर या docker-compose के लिए तैनाती
-
दो Ollama खाते दो अलग-अलग ईमेल के साथ
मैंने संस्करण का उपयोग किया`0.20.2`— वह जो आधिकारिक स्क्रिप्ट और संगत Docker इमेज द्वारा प्रदान की गई है।
चरण 1 : वॉल्यूम बनाएँ
होस्ट पर एक साधारण निर्देशिका, उदाहरण B की पहचान के लिए स्थायी वॉल्यूम के रूप में कार्य करेगी:
mkdir -p ~/ollama-b-data
यह फ़ोल्डर Docker कंटेनर में माउंट किया जाएगा जैसा`/root/.ollama`, जहाँ Ollama अपने पहचान की चाबियाँ, अपना इतिहास और अपने मॉडल संग्रहित करता है।
चरण 2 : डॉकर कंटेनर लॉन्च करें
# docker-compose.yml
services:
ollama-instance-b:
image: ollama/ollama:0.20.2
container_name: ollama-instance-b
ports:
- "11435:11434"
volumes:
- /home/cheroliv/ollama-b-data:/root/.ollama
environment:
- OLLAMA_HOST=0.0.0.0
restart: always
यहाँ क्या हो रहा है :
-
बंदरगाह11435होस्ट का मैप किया गया है पर11434कंटेनर का आंतरिक। इस प्रकार, डॉकर इंस्टेंस सुन रहा है पर`:11435`संघर्ष के बिना मूल इंस्टेंस के साथ जो कब्ज़ा जमाए हुए`:11434`.
-
वॉल्यूम`~/ollama-b-data`पर स्थापित है`/root/.ollama`— यहाँ पर SSH पहचान संग्रहीत की जाएगी।
-
`OLLAMA_HOST=0.0.0.0`कंटेनर को बाहरी कनेक्शन स्वीकार करने की अनुमति देता है।
मैंने पोर्टेनियर के माध्यम से इस स्टैक को तैनात किया, लेकिन एक साधारण`docker compose up -d`यह भी ठीक उसी तरह काम करता है।
चरण 3: सार्वजनिक कुंजी प्राप्त करें
कंटेनर पहला बूट होने पर खाली होने के कारण, Ollama वॉल्यूम में एक नई SSH कुंजी जोड़ी स्वचालित रूप से उत्पन्न करती है। हम सार्वजनिक कुंजी प्राप्त करते हैं:
$ docker exec ollama-instance-b cat /root/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ+dvnfmuo49q5O8LOlvgZ39SKORFw47ry9k4H2jPc
मैं जाँच रहा हूँ कि यह कुंजी विभिन्न है नैसर्गिक इंटेंस की कुंजी से :
# Instance native
$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyF...(différente)
# Instance Docker
$ cat ~/ollama-b-data/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ...(différente)
दो अलग चाबियाँ, दो अलग पहचानें। बाज़ी लग चुकी है।
|
यदि आपका कंटेनर पुनः आरंभ होता है, तो वह पुनः उपयोग करता है वॉल्यूम में मौजूद कुंजियों को। पहचान स्थायी है। आप प्रो खाते के साथ संबंध नहीं खोएंगे। |
चरण 4 : Ollama.com पर कुंजी सहेजें
निर्देश https://ollama.com/settings/keys → Add SSH Key. हम डॉकर इंस्टेंस की सार्वजनिक कुंजी चिपकाते हैं और मान्य करते हैं।
फिर, हम इस पहचान को प्रो बी खाते से जोड़ते हैं:
$ docker exec -it ollama-instance-b ollama signin
ब्राउज़र खुल जाता है, हम खाते B के ईमेल से लॉग इन करते हैं, और टोकन कंटेनर की SSH कुंजी से संबद्ध है। हम जाँचते हैं कि सब कुछ ठीक है :
$ docker exec -it ollama-instance-b ollama signin
User: cherolivpro
चरण 5 : एक छोटे निःशुल्क मॉडल के साथ परीक्षण करें
Pro subscription की कीमत निर्धारित करने से पहले, मैं सुनिश्चित होना चाहता हूँ कि पाइप काम कर रहा है। मैं कनेक्टिविटी को मान्य करने के लिए pull एक छोटा स्थानीय और मुफ्त मॉडल लेता हूँ :
$ docker exec ollama-instance-b ollama pull qwen3:0.6b
pulling manifest
pulling 7f4030143c1c: 100% ▕██████████████████▏ 522 MB
success
$ curl -s http://localhost:11435/api/tags
{"models":[{"name":"qwen3:0.6b","model":"qwen3:0.6b",...}]}
बंदरगाह`11435`जवाब देता है, मॉडल सेवा में है। इंस्टेंस B जीवित है।
एक बार आश्वस्त हो जाने के बाद, मैं वास्तविक क्लाउड प्रो मॉडल के पुल पर स्विच करता हूँ :
$ docker exec ollama-instance-b ollama pull deepseek-v4-pro:cloud
pulling manifest
pulling 31c3059e137e: 100% ▕██████████████████▏ 344 B
success
344 बाइट क्लाउड मॉडल के मैनिफेस्ट के लिए — सामान्य, अनुमान सर्वर पर होता है, स्थानीय रूप से नहीं। और यहाँ अंतिम परीक्षण :
$ curl -s http://localhost:11435/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-pro:cloud","messages":[{"role":"user","content":"Dis bonjour en une phrase courte."}]}'
{
"id": "chatcmpl-480",
"model": "deepseek-v4-pro",
"choices": [{
"message": { "content": "Bonjour !" },
"finish_reason": "stop"
}],
"usage": { "total_tokens": 181 }
}
तुम्हारे लिए भी नमस्ते, उदाहरण B
एपीआई का जाल `/v1/models
मैं एक बेवकूफ़ विवरण पर 20 मिनट गंवा दिया। जब मैंने प्रोवाइडर को कॉन्फ़िगर किया।`ollama-b`ओपनकोड में, मॉडल चयनकर्ता में कुछ भी नहीं दिख रहा था। कुछ भी नहीं। बिल्कुल नहीं।
कारण? एपीआई`/v1/models`इंस्टेंस बी की वापस लौट रहा था`{"object":"list","data":null}`के बजाय`{"object":"list","data":[]}`जब कोई मॉडल नहीं खींचा गया था। मान`null`ओपनकोड साइड पर पार्सिंग क्रैश हो रहा था, जो प्रदाता को प्रदर्शित नहीं कर रहा था।
समाधान: OpenCode कॉन्फ़िगरेशन में मॉडलों को स्पष्ट रूप से घोषित करें, डायनामिक खोज पर भरोसा करने के बजाय।
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (local)",
"options": { "baseURL": "http://localhost:11434/v1" },
"models": {
"gemma4:e2b": { "name": "Gemma 4 E2B (local)" }
}
},
"ollama-b": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama Instance B (Docker)",
"options": { "baseURL": "http://localhost:11435/v1" },
"models": {
"qwen3:0.6b": { "name": "Qwen3 0.6B (B)" },
"deepseek-v4-pro:cloud": { "name": "DeepSeek V4 Pro (B)" }
}
}
}
}
इस स्पष्ट घोषणा के साथ, OpenCode तुरंत provider B और उसके मॉडल को देखता है। एक सत्र का पुनः प्रारंभ, और सलेक्टर`/models`दो उदाहरणों को बगल में दिखाता है
|
यदि आप अपना कस्टम प्रदाता नहीं देखते हैं`/models`, अपने टर्मिनल को रीबूट करने में तीन घंटे बर्बाद न करें। मैन्युअली मॉडल्स में घोषित करें`opencode.json`यह समस्या तुरंत हल हो जाती है। |
परिणाम: दो सत्र, दो खाते, शून्य संघर्ष
अंततः, मैं दो OpenCode सत्र समानांतर रूप से लॉन्च कर सकता हूँ:
Session 1 → /models → Ollama (local) → deepseek-v4-pro:cloud → Compte A
Session 2 → /models → Ollama Instance B (Docker) → deepseek-v4-pro:cloud → Compte B
हर सत्र का अपना कोटा, अपना रेट लिमिट होता है, और वे एक-दूसरे के पैर पर नहीं पड़ते। उसी मशीन, उसी ब्लू कार्ड, दो अलग-अलग ईमेल।
और सबसे अच्छी बात क्या है? Docker कंटेनर है en`restart: always`. यह सिस्टम रीबूट्स को बिना किसी हस्तचालित हस्तक्षेप के सहन करता है।
सीखे गए सबक
-
Docker सब चीज़ों को अलग करता है, पहचान भी— एक साधारण वॉल्यूम बाइंड माउंट से कंटेनर को अपना स्वयं का SSH कुंजियों का सेट देकर, इसे Ollama की नज़रों से एक भिन्न भौतिक मशीन से अपरिभेद्य बनाया जा सकता है।
-
दो ईमेल, वही सीबी— Ollama एक ही भुगतान विधि से कई सदस्यताओं को अवरुद्ध नहीं करता है। केवल ईमेल को अलग होना चाहिए।
-
भुगतान करने से पहले मुफ्त परीक्षण — Un
ollama pull qwen3:0.6b(modèle libre, 522 Mo) permet de valider toute la chaîne réseau sans débourser un centime. Vous validez le plomberie d’abord, vous activez le Pro ensuite. -
/v1/models` के साथ
data: nullतोड़ता है OpenCode— यदि आप एक कस्टम प्रोवाइडर को कॉन्फ़िगर करते हैं`"models": {}`, OpenCode API के माध्यम से मॉडल खोजने का प्रयास कर रहा है। यदि API जवाब देती है`data: null`, लेकिन प्रदाता नहीं दिखता है। मॉडल स्पष्ट रूप से घोषित करें। -
दो खाते, यह मानव मल्टी-प्रोसेसिंग है— एक प्रो अकाउंट = एक सक्रिय OpenCode सत्र। दो खाते = दो समानांतर सत्र। किसी ऐसे व्यक्ति के लिए जो कई Gradle प्रोजेक्ट्स को एक साथ संभाल रहा हो, यह एक गेम चेंजर है।