eclipse - eclipse-mosquitto 中的 docker exec 错误
问题描述
eclipse-mosquitto 在 Ubuntu 上使用 Docker 安装它们。我想执行“docker exec”命令,但它给出了以下错误?你能帮我吗?
sudo docker ps
输出:
CONTAINER ID: b416d716ffd6 IMAGE: eclipse-mosquitto COMMAND: "/docker-entrypoint.…" CREATED: 2 days ago STATUS: Up 44 minutes PORTS: 0.0.0.0:9001->9001/tcp, 0.0.0.0:11883->1883/tcp NAME: charming_bohr
命令:
sudo docker exec -it b416d716ffd6 /bin/bash
输出:OCI 运行时执行失败:执行失败:container_linux.go:370:启动容器进程导致:执行:“/bin/bash”:stat /bin/bash:没有这样的文件或目录:未知
for:自代理启动以来接收到的总字节数。
sudo docker exec -it b416d716ffd6 $SYS/broker/bytes/received
输出:
OCI runtime exec failed: exec failed: container_linux.go:370: starting container process caused: exec: "/broker/bytes/received": stat /broker/bytes/received: no such file or directory: unknown
解决方案
有两个明显的问题。
eclipse mosquitto 图像不包含 bash,因此您需要使用不同的 shell,例如 sh
`sudo docker exec -it b416d716ffd6 /bin/sh
$SYS/broker/bytes/received
是一个由 mosquitto 在内部自动管理的特殊主题,您可以“从外部”访问它,而无需在正在运行的容器中执行任何操作,例如,您可以使用 mosquitto sub(sudo apt-get install -y mosquitto_clients
如果您还没有它)mosquitto_sub -t '$SYS/broker/bytes/received'
-h
如果 mosquitto 不在本地主机上,-p
如果它不在默认端口上,-d
如果您希望它更详细等等,则添加选项。
作为参考,在mosquitto 手册页中清楚地解释了 MQTT 客户端的这种需求:
代理状态 客户端可以通过订阅 $SYS 层次结构中的主题来查找有关代理的信息,如下所示。标记为静态的主题仅在订阅时每个客户端发送一次。所有其他主题每 sys_interval 秒更新一次。如果 sys_interval 为 0,则不发送更新。
请注意,如果您使用命令行客户端与 $SYS 主题交互并且您的 shell 将 $ 解释为环境变量,则需要将主题放在单引号 '$SYS/...' 中或转义美元符号: $SYS/... 否则 $SYS 将被视为环境变量。
$SYS/broker/bytes/received 自代理启动以来收到的总字节数。
推荐阅读
- angular - Angular 8 ngStyle 有时在循环中不起作用
- html - HTML/CSS 标记:在 HiPPI 显示器上使用 DIV 块绘制的不规则、不对称线条
- php - php redis 中的 diff b/w pset 和 psetx 是什么?是否可以将数组设置为值?
- php - node.js 类似 php 的分隔符
- python - 从右到左对齐在 Python Word Cloud 中不起作用
- xcode - 如何在 Xcode 中连接到 Gitlab 帐户?
- flutter - 为什么我不能引用对象的另一个键中的键?
- java - \app-theme-engine-0.5.2\res\layout\ate_preference_checkbox.xml:2:AAPT:警告:为外部包“android”生成 id“android:id/checkbox”
- javascript - 如何有效地检查 url 是否有效(实际上是加载带有内容的页面)?
- java - Oracle 数据库更改通知 JDBC