我一直在尝试在树莓派上的容器中运行 homebridge,这里是 docker-compose.yaml 定义:
services:
homebridge:
image: homebridge/homebridge:latest
container_name: homebridge
restart: always
network_mode: host
environment:
- PGID=1099
- PUID=1099
- HOMEBRIDGE_CONFIG_UI=1
- HOMEBRIDGE_CONFIG_UI_PORT=8581
volumes:
- /raid/config/homebridge:/homebridge
应用程序成功启动,我可以在日志中看到 HTTP 服务器已启动并正在运行:
[10/3/2024, 10:30:14 PM] [Homebridge UI] Homebridge UI v4.59.0 is listening on :: port 8581
现在,如果我卷曲端口,我会收到连接被拒绝的消息:
$ curl localhost:8581
curl: (7) Failed to connect to localhost port 8581: Connection refused
对我来说没有意义的是,如果我执行到容器中并执行完全相同的操作,则调用将通过:
$ docker exec -it 3783843255f7 /bin/bash
Note: This is a restricted shell, sudo cannot be used here.
Homebridge Terminal
Node.js Version: v20.17.0
Node.js Path: /opt/homebridge/bin/node
Plugin Path: /var/lib/homebridge/node_modules
Update Node.js: hb-service update-node
Install Plugin: hb-service add homebridge-plugin-name
Remove Plugin: hb-service remove homebridge-plugin-name
root@tardis:/homebridge $ curl localhost:8581
<!doctype html>
<html lang="en">
...
容器运行在主机网络模式下,为什么外部无法访问8581端口?
无根运行
这是一个不同的网络命名空间:
主机网络 (
) 也在 RootlessKit 内命名。docker run --net=host
https://docs.docker.com/engine/security/rootless/#known-limitations
当 docker 在容器内(docker-in-docker、snap)、VM(docker 桌面或访问远程 docker 引擎)内无根运行时,docker 引擎的 localhost 与 docker 引擎的 localhost 不同用户执行 CLI。