关于 docker run 和 docker exec 执行结果不一样的疑问🤔️

2022-06-04 21:47:18 +08:00
 binhb

背景是这样的

使用 rustlibpcaptui-rs, 写了一个监控网络流量的命令行 UI, 因为想简化使用的方式, 又了解到 --net=host 可以访问到宿主机的网络, 所以想放入 docker 容器.

顺利成章的写出了如下的 dockerfile

本来是分阶段构建的, 为了测试方便改成直接启动了

FROM rust:latest as builder

WORKDIR /usr/src/netop

RUN apt-get update && apt-get install -y git libpcap-dev build-essential

RUN git clone https://github.com/ZingerLittleBee/netop.git

RUN mv netop/* .

RUN cargo install --path .

ENTRYPOINT [ "netop" ]

镜像构建好, 运行容器

docker run --privileged --net=host netop

然后就出现如下错误, 意思是说 eth0 这块网卡不存在, 在容器内使用 ifconfig 是可以看到 eth0

Error: Os { code: 6, kind: Uncategorized, message: "No such device or address" }

奇怪的地方来了

首先我创建了交互式的容器

docker run -i --privileged --net=host --name=netop rust:latest

手动执行了 Dockerfile 中的命令

apt-get update && apt-get install -y git libpcap-dev build-essential
git clone https://github.com/ZingerLittleBee/netop.git
mv netop/* .
cargo install --path .

运行依旧是之前的错误

但是

我保持了交互式容器的会话, 然后新打开一个终端标签使用 docker exec

docker exec -it netop bash

进入容器, 运行 netop 就可以跑起来, 运行起来是这样的

疑问🤔️

排除下

我怀疑是权限问题, 但是容器使用了特权模式和 host 网络

为什么 docker run dockerfile 会出错, 但是 docker exec 可以执行呢

1689 次点击
所在节点    Docker
2 条回复
choury
2022-06-04 22:46:05 +08:00
docker run -it xxx 试下,这个设备说的不清不楚,说不定是 tty 设备
binhb
2022-06-05 00:09:01 +08:00
@choury #1 非常非常感谢,困扰我两天了,-it 真的可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857293

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX