mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-30 03:01:21 +02:00
fix(diagnostics): read the subnet the host is actually on (issue #3092)
The Network subnet check told the reporter that 192.168.98.170 and 192.168.96.9 were on different networks and to go configure routing between them. They are four hundred addresses apart inside one 192.168.96.0/22 LAN. An IPv4 address does not carry its prefix, and the check supplied /24 for both sides. That is the most common LAN and not the only one, and the guess is wrong in both directions: it splits a /22 and it merges a /25. Read the prefix off the interface that owns the address instead. find_local_ipv4_network() enumerates every interface, including the ones EXCLUDED_INTERFACE_PREFIXES hides. That list keeps docker0 and friends out of the Virtual Printer's bind dropdown; here the caller is asking about an address the kernel has already picked as a route source, and answering "unknown" because it sits on a bridge would be a worse answer than the truth. When nothing claims the address the check skips, which is what it always did with no host IP at all -- it must not assert a split it cannot see. The same check chose which of Bambuddy's own addresses to compare by probing a route toward 10.255.255.255, which on a multi-homed host is not the interface the printer is on. It asks for the route toward the printer now. On a two-NIC dev box that alone was warning about a printer sitting on the second card's own subnet. The probe takes IPv4 literals only. connect() on a name would resolve it on the event loop, and _same_subnet rejects names anyway, so nothing is lost. Resolving the prefix shells out to `ip -j addr show`, so it moves off the loop too. ----- fix(diagnostics): name the container engine instead of asking about Docker (issue #3092) "Not running in Docker - not applicable", said to a Bambuddy inside a Podman container. It reads as "you are on bare metal", and it sent the reporter looking for his problem somewhere else. Podman runs Bambuddy in exactly the two shapes Docker does, and the shape is the thing that breaks printer discovery and the Virtual Printer. detect_container_runtime() names the engine -- Docker, Podman, Kubernetes, containerd, LXC, or a container it cannot place -- and the check became Container network mode. is_running_in_docker() is deliberately left alone rather than rewritten on top of it. Three callers key real behaviour off that flag, and one of them switches the Add Printer flow from SSDP to subnet scanning. SSDP works for a host-networked Podman container, so answering True there would take a working feature away to fix a sentence. Widening it is a separate decision from naming the engine, so it is made separately. Mode detection keeps the original signal first, which also makes the Docker path incapable of regressing: a Docker host always has a docker0, so a container that sees one shares its namespace, and the new rules can only turn a warning into a pass. That signal says nothing about Podman, which creates no such interface on a host running no bridge containers -- which is how host networking came to be reported as bridge. The general form of the same idea answers for Podman: an interface whose iflink equals its ifindex was created in this namespace, and a NAT-networked container only ever receives one end of a veth pair. tun/tap is skipped, because a container may run its own WireGuard and that tun is native to a namespace it is not evidence of. The interface also has to be the one the kernel just named -- sysfs is namespace-tagged but a bind-mounted host /sys is not, and reading a colliding name's numbers would be reading another namespace's answer. What is still unreadable now says so and suggests host networking if discovery is failing, rather than guessing bridge and telling a healthy install to recreate itself. An LXC or LXD system container is named and told the question does not apply: it is on the LAN like a small virtual machine, so there is no network mode to recommend -- and its subnet check still runs. An engine we cannot name is a sentinel the frontend localizes, not a word interpolated into thirteen other languages. The support bundle carries the engine name beside the Docker flag, so the next report of this shape is answerable from the bundle.
This commit is contained in:
@@ -175,6 +175,76 @@ describe('ConnectionDiagnosticModal', () => {
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('names the container engine in the network-mode check (#3092)', async () => {
|
||||
const spy = vi.spyOn(api, 'diagnosePrinter').mockResolvedValue({
|
||||
...PROBLEM_RESULT,
|
||||
overall: 'ok',
|
||||
checks: [{ id: 'network_mode', status: 'pass', params: { mode: 'host', runtime: 'Podman' } }],
|
||||
});
|
||||
|
||||
renderModal({ printerId: 1, printerName: 'Test P1S', onClose: vi.fn() });
|
||||
|
||||
await waitFor(() => expect(spy).toHaveBeenCalledTimes(1));
|
||||
// The title is no longer Docker-specific, and the engine the user
|
||||
// actually runs is named back to them.
|
||||
expect(await screen.findByText(/Container network mode/i)).toBeInTheDocument();
|
||||
expect(screen.getByText(/Running in Podman with host networking/i)).toBeInTheDocument();
|
||||
expect(screen.queryByText(/Docker network mode/i)).not.toBeInTheDocument();
|
||||
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('localizes an unnamed container engine instead of interpolating a raw word (#3092)', async () => {
|
||||
const spy = vi.spyOn(api, 'diagnosePrinter').mockResolvedValue({
|
||||
...PROBLEM_RESULT,
|
||||
overall: 'ok',
|
||||
checks: [{ id: 'network_mode', status: 'pass', params: { mode: 'host', runtime: 'container' } }],
|
||||
});
|
||||
|
||||
renderModal({ printerId: 1, printerName: 'Test P1S', onClose: vi.fn() });
|
||||
|
||||
await waitFor(() => expect(spy).toHaveBeenCalledTimes(1));
|
||||
// "a container", not the bare backend sentinel — the same slot carries a
|
||||
// localized noun phrase in every other locale.
|
||||
expect(await screen.findByText(/Running in a container with host networking/i)).toBeInTheDocument();
|
||||
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('says so when a container network mode cannot be read, instead of guessing (#3092)', async () => {
|
||||
const spy = vi.spyOn(api, 'diagnosePrinter').mockResolvedValue({
|
||||
...PROBLEM_RESULT,
|
||||
overall: 'warnings',
|
||||
checks: [{ id: 'network_mode', status: 'skip', params: { reason: 'unknown', runtime: 'Podman' } }],
|
||||
});
|
||||
|
||||
renderModal({ printerId: 1, printerName: 'Test P1S', onClose: vi.fn() });
|
||||
|
||||
await waitFor(() => expect(spy).toHaveBeenCalledTimes(1));
|
||||
expect(await screen.findByText(/network mode could not be determined/i)).toBeInTheDocument();
|
||||
// Must not claim bare metal, which is what sent the reporter looking
|
||||
// for the problem somewhere else.
|
||||
expect(screen.queryByText(/not running in a container/i)).not.toBeInTheDocument();
|
||||
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('does not offer host networking to a system container (#3092)', async () => {
|
||||
const spy = vi.spyOn(api, 'diagnosePrinter').mockResolvedValue({
|
||||
...PROBLEM_RESULT,
|
||||
overall: 'ok',
|
||||
checks: [{ id: 'network_mode', status: 'skip', params: { reason: 'system_container', runtime: 'LXC' } }],
|
||||
});
|
||||
|
||||
renderModal({ printerId: 1, printerName: 'Test P1S', onClose: vi.fn() });
|
||||
|
||||
await waitFor(() => expect(spy).toHaveBeenCalledTimes(1));
|
||||
expect(await screen.findByText(/LXC system container/i)).toBeInTheDocument();
|
||||
expect(screen.queryByText(/recreate the container/i)).not.toBeInTheDocument();
|
||||
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('falls back to the generic skip text when no reason is present', async () => {
|
||||
const spy = vi.spyOn(api, 'diagnosePrinter').mockResolvedValue({
|
||||
...PROBLEM_RESULT,
|
||||
|
||||
@@ -40,10 +40,18 @@ export function DiagnosticChecklist({ result }: { result: PrinterDiagnosticResul
|
||||
: 'bg-red-50 dark:bg-red-500/10 border-red-300 dark:border-red-500/30 text-red-700 dark:text-red-300';
|
||||
|
||||
const renderCheck = (check: DiagnosticCheck) => {
|
||||
// The network_mode check names the container engine it found. Docker,
|
||||
// Podman and the rest are proper nouns and read correctly in every
|
||||
// language; a container it could not name arrives as this sentinel and
|
||||
// is localized here, rather than dropping an English word into the other
|
||||
// thirteen locales (#3092). Keep in step with RUNTIME_OTHER in
|
||||
// backend/app/services/discovery.py.
|
||||
const params =
|
||||
check.id === 'port_rtsps'
|
||||
? { protocol: 'RTSPS', port: 322, ...check.params }
|
||||
: check.params;
|
||||
: check.id === 'network_mode' && check.params?.runtime === 'container'
|
||||
? { ...check.params, runtime: t('diagnostic.check.network_mode.genericRuntime') }
|
||||
: check.params;
|
||||
// A check may carry a `reason` to select a more specific message variant
|
||||
// (e.g. external_storage skip on P1-series → skip_unsupported_model #2524);
|
||||
// fall back to the plain per-status text when no variant key exists.
|
||||
|
||||
@@ -6989,10 +6989,13 @@ export default {
|
||||
warn: 'Port {{port}} ist nicht erreichbar. Die Live-Kameraansicht funktioniert nicht. Dies betrifft das Drucken nicht.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker-Netzwerkmodus',
|
||||
pass: 'Läuft im Host-Netzwerkmodus.',
|
||||
warn: 'Bambuddy läuft im Docker-Bridge-Netzwerkmodus. Die Druckererkennung und der virtuelle Drucker benötigen den Host-Netzwerkmodus — erstellen Sie den Container mit "network_mode: host" neu.',
|
||||
skip: 'Läuft nicht in Docker — nicht zutreffend.',
|
||||
title: 'Container-Netzwerkmodus',
|
||||
genericRuntime: 'einem Container',
|
||||
pass: 'Läuft in {{runtime}} mit Host-Netzwerk.',
|
||||
warn: 'Bambuddy läuft in {{runtime}} mit Bridge-Netzwerk. Die Druckererkennung und der virtuelle Drucker benötigen den Host-Netzwerkmodus — erstellen Sie den Container mit Host-Netzwerk neu ("network_mode: host" in docker-compose, "--network=host" bei Podman).',
|
||||
skip: 'Läuft nicht in einem Container — nicht zutreffend.',
|
||||
skip_unknown: 'Bambuddy läuft in {{runtime}}, der Netzwerkmodus konnte jedoch nicht ermittelt werden. Falls die Druckererkennung oder der virtuelle Drucker nicht funktionieren, erstellen Sie den Container mit Host-Netzwerk neu.',
|
||||
skip_system_container: 'Bambuddy läuft in einem {{runtime}}-Systemcontainer, der wie eine virtuelle Maschine direkt im LAN liegt — nicht zutreffend.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Netzwerk-Subnetz',
|
||||
|
||||
@@ -7040,10 +7040,13 @@ export default {
|
||||
warn: 'Port {{port}} is unreachable. The live camera view will not work. This does not affect printing.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker network mode',
|
||||
pass: 'Running in host network mode.',
|
||||
warn: 'Bambuddy is running in Docker bridge networking. Printer discovery and the Virtual Printer need host network mode — recreate the container with "network_mode: host".',
|
||||
skip: 'Not running in Docker — not applicable.',
|
||||
title: 'Container network mode',
|
||||
genericRuntime: 'a container',
|
||||
pass: 'Running in {{runtime}} with host networking.',
|
||||
warn: 'Bambuddy is running in {{runtime}} with bridge networking. Printer discovery and the Virtual Printer need host networking — recreate the container with host network mode ("network_mode: host" in docker-compose, "--network=host" for Podman).',
|
||||
skip: 'Not running in a container — not applicable.',
|
||||
skip_unknown: 'Bambuddy is running in {{runtime}}, but its network mode could not be determined. If printer discovery or the Virtual Printer do not work, recreate the container with host networking.',
|
||||
skip_system_container: 'Bambuddy is running in a {{runtime}} system container, which sits on the LAN like a virtual machine — not applicable.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Network subnet',
|
||||
|
||||
@@ -6997,10 +6997,13 @@ export default {
|
||||
warn: 'El puerto {{port}} no es accesible. La vista de la cámara en directo no funcionará. Esto no afecta a la impresión.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Modo de red de Docker',
|
||||
pass: 'Ejecutándose en modo de red de host.',
|
||||
warn: 'Bambuddy se está ejecutando en red de tipo bridge de Docker. La detección de impresoras y la impresora virtual necesitan el modo de red de host — vuelva a crear el contenedor con "network_mode: host".',
|
||||
skip: 'No se está ejecutando en Docker — no aplicable.',
|
||||
title: 'Modo de red del contenedor',
|
||||
genericRuntime: 'un contenedor',
|
||||
pass: 'Ejecutándose en {{runtime}} con red de host.',
|
||||
warn: 'Bambuddy se está ejecutando en {{runtime}} con red de tipo bridge. La detección de impresoras y la impresora virtual necesitan el modo de red de host — vuelva a crear el contenedor con red de host ("network_mode: host" en docker-compose, "--network=host" en Podman).',
|
||||
skip: 'No se está ejecutando en un contenedor — no aplicable.',
|
||||
skip_unknown: 'Bambuddy se está ejecutando en {{runtime}}, pero no se pudo determinar su modo de red. Si la detección de impresoras o la impresora virtual no funcionan, vuelva a crear el contenedor con red de host.',
|
||||
skip_system_container: 'Bambuddy se está ejecutando en un contenedor de sistema {{runtime}}, que está en la LAN como una máquina virtual — no aplicable.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Subred de la red',
|
||||
|
||||
@@ -6979,10 +6979,13 @@ export default {
|
||||
warn: 'Le port {{port}} est inaccessible. La vue caméra en direct ne fonctionnera pas. Cela n\'affecte pas l\'impression.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Mode réseau Docker',
|
||||
pass: 'Fonctionne en mode réseau host.',
|
||||
warn: 'Bambuddy fonctionne en réseau Docker bridge. La découverte d\'imprimantes et l\'imprimante virtuelle nécessitent le mode réseau host — recréez le conteneur avec "network_mode: host".',
|
||||
skip: 'Ne fonctionne pas dans Docker — non applicable.',
|
||||
title: 'Mode réseau du conteneur',
|
||||
genericRuntime: 'un conteneur',
|
||||
pass: 'Fonctionne dans {{runtime}} en réseau host.',
|
||||
warn: 'Bambuddy fonctionne dans {{runtime}} en réseau bridge. La découverte d\'imprimantes et l\'imprimante virtuelle nécessitent le mode réseau host — recréez le conteneur en réseau host ("network_mode: host" dans docker-compose, "--network=host" pour Podman).',
|
||||
skip: 'Ne fonctionne pas dans un conteneur — non applicable.',
|
||||
skip_unknown: 'Bambuddy fonctionne dans {{runtime}}, mais son mode réseau n\'a pas pu être déterminé. Si la découverte d\'imprimantes ou l\'imprimante virtuelle ne fonctionnent pas, recréez le conteneur en réseau host.',
|
||||
skip_system_container: 'Bambuddy fonctionne dans un conteneur système {{runtime}}, présent sur le LAN comme une machine virtuelle — non applicable.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Sous-réseau',
|
||||
|
||||
@@ -6978,10 +6978,13 @@ export default {
|
||||
warn: 'La porta {{port}} non è raggiungibile. La visualizzazione live della fotocamera non funzionerà. Questo non influisce sulla stampa.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Modalità di rete Docker',
|
||||
pass: 'In esecuzione in modalità di rete host.',
|
||||
warn: 'Bambuddy è in esecuzione con la rete Docker bridge. Il rilevamento delle stampanti e la stampante virtuale richiedono la modalità di rete host — ricrea il container con "network_mode: host".',
|
||||
skip: 'Non in esecuzione in Docker — non applicabile.',
|
||||
title: 'Modalità di rete del container',
|
||||
genericRuntime: 'un container',
|
||||
pass: 'In esecuzione in {{runtime}} con rete host.',
|
||||
warn: 'Bambuddy è in esecuzione in {{runtime}} con rete bridge. Il rilevamento delle stampanti e la stampante virtuale richiedono la modalità di rete host — ricrea il container con rete host ("network_mode: host" in docker-compose, "--network=host" per Podman).',
|
||||
skip: 'Non in esecuzione in un container — non applicabile.',
|
||||
skip_unknown: 'Bambuddy è in esecuzione in {{runtime}}, ma non è stato possibile determinarne la modalità di rete. Se il rilevamento delle stampanti o la stampante virtuale non funzionano, ricrea il container con rete host.',
|
||||
skip_system_container: 'Bambuddy è in esecuzione in un container di sistema {{runtime}}, presente sulla LAN come una macchina virtuale — non applicabile.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Sottorete',
|
||||
|
||||
@@ -6990,10 +6990,13 @@ export default {
|
||||
warn: 'ポート{{port}}に到達できません。ライブカメラ表示は機能しません。これは印刷には影響しません。',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Dockerネットワークモード',
|
||||
pass: 'ホストネットワークモードで実行中です。',
|
||||
warn: 'BambuddyはDockerブリッジネットワークで実行されています。プリンター検出と仮想プリンターにはホストネットワークモードが必要です — "network_mode: host" でコンテナを再作成してください。',
|
||||
skip: 'Dockerで実行されていません — 該当しません。',
|
||||
title: 'コンテナのネットワークモード',
|
||||
genericRuntime: 'コンテナ',
|
||||
pass: '{{runtime}} でホストネットワークを使用して実行中です。',
|
||||
warn: 'Bambuddy は {{runtime}} でブリッジネットワークを使用して実行されています。プリンター検出と仮想プリンターにはホストネットワークが必要です — ホストネットワークでコンテナを再作成してください(docker-compose では "network_mode: host"、Podman では "--network=host")。',
|
||||
skip: 'コンテナで実行されていません — 該当しません。',
|
||||
skip_unknown: 'Bambuddy は {{runtime}} で実行されていますが、ネットワークモードを判別できませんでした。プリンター検出や仮想プリンターが動作しない場合は、ホストネットワークでコンテナを再作成してください。',
|
||||
skip_system_container: 'Bambuddy は {{runtime}} のシステムコンテナで実行されており、仮想マシンと同様に LAN 上にあります — 該当しません。',
|
||||
},
|
||||
subnet: {
|
||||
title: 'ネットワークサブネット',
|
||||
|
||||
@@ -7090,10 +7090,13 @@ export default {
|
||||
warn: '포트 {{port}}에 연결할 수 없습니다. 라이브 카메라 보기가 작동하지 않습니다. 인쇄에는 영향을 주지 않습니다.'
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker 네트워크 모드',
|
||||
pass: '호스트 네트워크 모드로 실행 중입니다.',
|
||||
warn: 'Bambuddy가 Docker 브리지 네트워킹으로 실행 중입니다. 프린터 검색과 가상 프린터에는 호스트 네트워크 모드가 필요합니다 — "network_mode: host"로 컨테이너를 재생성하세요.',
|
||||
skip: 'Docker에서 실행 중이 아닙니다 — 해당 없음.'
|
||||
title: '컨테이너 네트워크 모드',
|
||||
genericRuntime: '컨테이너',
|
||||
pass: '{{runtime}}에서 호스트 네트워크로 실행 중입니다.',
|
||||
warn: 'Bambuddy가 {{runtime}}에서 브리지 네트워크로 실행 중입니다. 프린터 검색과 가상 프린터에는 호스트 네트워크가 필요합니다 — 호스트 네트워크로 컨테이너를 재생성하세요(docker-compose에서는 "network_mode: host", Podman에서는 "--network=host").',
|
||||
skip: '컨테이너에서 실행 중이 아닙니다 — 해당 없음.',
|
||||
skip_unknown: 'Bambuddy가 {{runtime}}에서 실행 중이지만 네트워크 모드를 확인할 수 없습니다. 프린터 검색이나 가상 프린터가 작동하지 않으면 호스트 네트워크로 컨테이너를 재생성하세요.',
|
||||
skip_system_container: 'Bambuddy가 {{runtime}} 시스템 컨테이너에서 실행 중이며, 가상 머신처럼 LAN에 연결되어 있습니다 — 해당 없음.'
|
||||
},
|
||||
subnet: {
|
||||
title: '네트워크 서브넷',
|
||||
|
||||
@@ -7040,10 +7040,13 @@ export default {
|
||||
warn: 'Poort {{port}} is niet bereikbaar. De livecamera werkt niet. Dit heeft geen invloed op afdrukken.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker-netwerkmodus',
|
||||
pass: 'Draait in host-netwerkmodus.',
|
||||
warn: 'Bambuddy draait met Docker bridge-netwerken. Printerdetectie en de Virtuele printer vereisen host-netwerkmodus — maak de container opnieuw aan met "network_mode: host".',
|
||||
skip: 'Niet actief in Docker — niet van toepassing.',
|
||||
title: 'Netwerkmodus van de container',
|
||||
genericRuntime: 'een container',
|
||||
pass: 'Draait in {{runtime}} met host-netwerk.',
|
||||
warn: 'Bambuddy draait in {{runtime}} met bridge-netwerken. Printerdetectie en de Virtuele printer vereisen host-netwerk — maak de container opnieuw aan met host-netwerk ("network_mode: host" in docker-compose, "--network=host" bij Podman).',
|
||||
skip: 'Draait niet in een container — niet van toepassing.',
|
||||
skip_unknown: 'Bambuddy draait in {{runtime}}, maar de netwerkmodus kon niet worden bepaald. Als printerdetectie of de Virtuele printer niet werken, maak de container dan opnieuw aan met host-netwerk.',
|
||||
skip_system_container: 'Bambuddy draait in een {{runtime}}-systeemcontainer, die net als een virtuele machine op het LAN zit — niet van toepassing.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Netwerksubnet',
|
||||
|
||||
@@ -6978,10 +6978,13 @@ export default {
|
||||
warn: 'A porta {{port}} está inacessível. A visualização ao vivo da câmera não funcionará. Isso não afeta a impressão.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Modo de rede Docker',
|
||||
pass: 'Executando no modo de rede host.',
|
||||
warn: 'O Bambuddy está sendo executado em rede Docker bridge. A descoberta de impressoras e a impressora virtual precisam do modo de rede host — recrie o contêiner com "network_mode: host".',
|
||||
skip: 'Não está sendo executado no Docker — não aplicável.',
|
||||
title: 'Modo de rede do contêiner',
|
||||
genericRuntime: 'um contêiner',
|
||||
pass: 'Executando em {{runtime}} com rede host.',
|
||||
warn: 'O Bambuddy está sendo executado em {{runtime}} com rede bridge. A descoberta de impressoras e a impressora virtual precisam da rede host — recrie o contêiner com rede host ("network_mode: host" no docker-compose, "--network=host" no Podman).',
|
||||
skip: 'Não está sendo executado em um contêiner — não aplicável.',
|
||||
skip_unknown: 'O Bambuddy está sendo executado em {{runtime}}, mas não foi possível determinar o modo de rede. Se a descoberta de impressoras ou a impressora virtual não funcionarem, recrie o contêiner com rede host.',
|
||||
skip_system_container: 'O Bambuddy está sendo executado em um contêiner de sistema {{runtime}}, que fica na LAN como uma máquina virtual — não aplicável.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Sub-rede',
|
||||
|
||||
@@ -6618,10 +6618,13 @@ export default {
|
||||
warn: "Порт {{port}} недоступен. Просмотр камеры в реальном времени работать не будет. На печать это не влияет.",
|
||||
},
|
||||
network_mode: {
|
||||
title: "Сетевой режим Docker",
|
||||
pass: "Используется сетевой режим host.",
|
||||
warn: "Bambuddy запущен в Docker с сетью bridge. Для обнаружения принтеров и виртуального принтера требуется режим host — пересоздайте контейнер с параметром «network_mode: host».",
|
||||
skip: "Bambuddy запущен не в Docker — проверка неприменима.",
|
||||
title: "Сетевой режим контейнера",
|
||||
genericRuntime: "контейнере",
|
||||
pass: "Работает в {{runtime}} с сетью host.",
|
||||
warn: "Bambuddy работает в {{runtime}} с сетью bridge. Для обнаружения принтеров и виртуального принтера требуется сеть host — пересоздайте контейнер с сетью host («network_mode: host» в docker-compose, «--network=host» для Podman).",
|
||||
skip: "Bambuddy запущен не в контейнере — проверка неприменима.",
|
||||
skip_unknown: "Bambuddy работает в {{runtime}}, но определить сетевой режим не удалось. Если обнаружение принтеров или виртуальный принтер не работают, пересоздайте контейнер с сетью host.",
|
||||
skip_system_container: "Bambuddy работает в системном контейнере {{runtime}}, который находится в локальной сети как виртуальная машина — проверка неприменима.",
|
||||
},
|
||||
subnet: {
|
||||
title: "Подсеть",
|
||||
|
||||
@@ -6928,10 +6928,13 @@ export default {
|
||||
warn: 'Port {{port}} erişilemez. Canlı kamera görünümü çalışmayacak. Bu, baskıyı etkilemez.',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker ağ modu',
|
||||
pass: 'Ana bilgisayar ağ modunda çalışıyor.',
|
||||
warn: 'Bambuddy, Docker köprü ağı kullanılarak çalışıyor. Yazıcı keşfi ve Sanal Yazıcı, ana bilgisayar ağ modu gerektirir — konteyneri "network_mode: host" ile yeniden oluşturun.',
|
||||
skip: 'Docker\'da çalışmıyor — uygulanamaz.',
|
||||
title: 'Konteyner ağ modu',
|
||||
genericRuntime: 'bir konteyner',
|
||||
pass: '{{runtime}} içinde ana bilgisayar ağıyla çalışıyor.',
|
||||
warn: 'Bambuddy, {{runtime}} içinde köprü ağıyla çalışıyor. Yazıcı keşfi ve Sanal Yazıcı ana bilgisayar ağı gerektirir — konteyneri ana bilgisayar ağıyla yeniden oluşturun (docker-compose için "network_mode: host", Podman için "--network=host").',
|
||||
skip: 'Bir konteyner içinde çalışmıyor — uygulanamaz.',
|
||||
skip_unknown: 'Bambuddy {{runtime}} içinde çalışıyor ancak ağ modu belirlenemedi. Yazıcı keşfi veya Sanal Yazıcı çalışmıyorsa konteyneri ana bilgisayar ağıyla yeniden oluşturun.',
|
||||
skip_system_container: 'Bambuddy, sanal makine gibi doğrudan yerel ağda bulunan bir {{runtime}} sistem konteyneri içinde çalışıyor — uygulanamaz.',
|
||||
},
|
||||
subnet: {
|
||||
title: 'Ağ alt ağı',
|
||||
|
||||
@@ -7032,10 +7032,13 @@ export default {
|
||||
warn: "Порт {{port}} недоступний. Перегляд з камери в реальному часі не працюватиме. Це не впливає на друк.",
|
||||
},
|
||||
network_mode: {
|
||||
title: "Мережевий режим Docker",
|
||||
pass: "Працює в режимі хост-мережі.",
|
||||
warn: "Bambuddy працює в мостовому мережевому режимі Docker. Для виявлення принтерів і роботи віртуального принтера потрібен режим мережі хоста — повторно створіть контейнер із параметром \"network_mode: host\".",
|
||||
skip: "Не працює в Docker — не застосовується.",
|
||||
title: "Мережевий режим контейнера",
|
||||
genericRuntime: "контейнері",
|
||||
pass: "Працює в {{runtime}} із мережею хоста.",
|
||||
warn: "Bambuddy працює в {{runtime}} із мостовою мережею. Для виявлення принтерів і роботи віртуального принтера потрібна мережа хоста — повторно створіть контейнер із мережею хоста (\"network_mode: host\" у docker-compose, \"--network=host\" для Podman).",
|
||||
skip: "Не працює в контейнері — не застосовується.",
|
||||
skip_unknown: "Bambuddy працює в {{runtime}}, але визначити мережевий режим не вдалося. Якщо виявлення принтерів або віртуальний принтер не працюють, повторно створіть контейнер із мережею хоста.",
|
||||
skip_system_container: "Bambuddy працює в системному контейнері {{runtime}}, який перебуває в локальній мережі як віртуальна машина — не застосовується.",
|
||||
},
|
||||
subnet: {
|
||||
title: "Мережева підмережа",
|
||||
|
||||
@@ -6976,10 +6976,13 @@ export default {
|
||||
warn: '端口 {{port}} 不可达。实时摄像头视图将无法工作。这不影响打印。',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker 网络模式',
|
||||
pass: '正在以 host 网络模式运行。',
|
||||
warn: 'Bambuddy 正在以 Docker bridge 网络运行。打印机发现和虚拟打印机需要 host 网络模式 — 请使用 "network_mode: host" 重新创建容器。',
|
||||
skip: '未在 Docker 中运行 — 不适用。',
|
||||
title: '容器网络模式',
|
||||
genericRuntime: '容器',
|
||||
pass: '正在 {{runtime}} 中以 host 网络运行。',
|
||||
warn: 'Bambuddy 正在 {{runtime}} 中以 bridge 网络运行。打印机发现和虚拟打印机需要 host 网络 — 请使用 host 网络重新创建容器(docker-compose 中为 "network_mode: host",Podman 中为 "--network=host")。',
|
||||
skip: '未在容器中运行 — 不适用。',
|
||||
skip_unknown: 'Bambuddy 正在 {{runtime}} 中运行,但无法确定其网络模式。如果打印机发现或虚拟打印机无法使用,请使用 host 网络重新创建容器。',
|
||||
skip_system_container: 'Bambuddy 正在 {{runtime}} 系统容器中运行,它像虚拟机一样直接位于局域网中 — 不适用。',
|
||||
},
|
||||
subnet: {
|
||||
title: '网络子网',
|
||||
|
||||
@@ -6976,10 +6976,13 @@ export default {
|
||||
warn: '連接埠 {{port}} 無法連線。即時攝影機檢視將無法運作。這不影響列印。',
|
||||
},
|
||||
network_mode: {
|
||||
title: 'Docker 網路模式',
|
||||
pass: '正在以 host 網路模式執行。',
|
||||
warn: 'Bambuddy 正在以 Docker bridge 網路執行。印表機探索與虛擬印表機需要 host 網路模式 — 請使用 "network_mode: host" 重新建立容器。',
|
||||
skip: '未在 Docker 中執行 — 不適用。',
|
||||
title: '容器網路模式',
|
||||
genericRuntime: '容器',
|
||||
pass: '正在 {{runtime}} 中以 host 網路執行。',
|
||||
warn: 'Bambuddy 正在 {{runtime}} 中以 bridge 網路執行。印表機探索與虛擬印表機需要 host 網路 — 請使用 host 網路重新建立容器(docker-compose 中為 "network_mode: host",Podman 中為 "--network=host")。',
|
||||
skip: '未在容器中執行 — 不適用。',
|
||||
skip_unknown: 'Bambuddy 正在 {{runtime}} 中執行,但無法判斷其網路模式。如果印表機探索或虛擬印表機無法使用,請使用 host 網路重新建立容器。',
|
||||
skip_system_container: 'Bambuddy 正在 {{runtime}} 系統容器中執行,它像虛擬機器一樣直接位於區域網路中 — 不適用。',
|
||||
},
|
||||
subnet: {
|
||||
title: '網路子網路',
|
||||
|
||||
Reference in New Issue
Block a user