eclipse-mosquitto 中的 docker exec 错误
Posted
技术标签:
【中文标题】eclipse-mosquitto 中的 docker exec 错误【英文标题】:error in docker exec in eclipse-mosquitto 【发布时间】:2021-05-10 18:35:50 【问题描述】: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
【问题讨论】:
您好,第一个错误表示在容器中找不到/bin/bash,可能是没有安装。您可以尝试改用sh
-> sudo docker exec -it b416d716ffd6 sh
【参考方案1】:
有两个不同的问题。
eclipse mosquitto 映像不包含 bash,因此您需要使用不同的 shell,例如 sh
`sudo docker exec -it b416d716ffd6 /bin/sh
$SYS/broker/bytes/received
是一个特殊的 topic,由 mosquitto 在内部自动管理,您可以“从外部”访问它,而无需在正在运行的容器中执行任何操作,例如,您可以使用 mosquitto sub ( sudo apt-get install -y mosquitto_clients
,如果你还没有的话)
mosquitto_sub -t '$SYS/broker/bytes/received'
如果 mosquitto 不在本地主机上,则添加 -h
选项,如果它不在默认端口上,则添加 -p
,如果您希望它更详细,则添加 -d
等等。
供参考,mosquitto man page 中明确说明了对 MQTT 客户端的这种需求:
经纪人状态客户可以通过以下方式找到有关经纪人的信息 订阅 $SYS 层次结构中的主题,如下所示。标记的主题 因为静态仅在订阅时每个客户端发送一次。所有其他 主题每 sys_interval 秒更新一次。如果 sys_interval 为 0, 则不会发送更新。
请注意,如果您使用命令行客户端与 $SYS 主题和您的 shell 将 $ 解释为环境变量, 您需要将主题放在单引号 '$SYS/...' 中或转义 美元符号:$SYS/... 否则 $SYS 将被视为 环境变量。
$SYS/broker/bytes/received 自以来收到的总字节数 经纪人开始了。
【讨论】:
以上是关于eclipse-mosquitto 中的 docker exec 错误的主要内容,如果未能解决你的问题,请参考以下文章