我想创建一个可以读取名为helloworld.proto的文件并运行命令的 docker 容器
protoc --dart_out=grpc:lib/src/generated -Iprotos protos/helloworld.proto
容器将从所有依赖项开始,并使用主机可以访问的 gRPC 生成所需的文件。这是可以实现的吗?
如果您的进程的主要目标是从主机系统读取文件并将文件写回主机系统,您会发现直接在主机系统上运行进程而不涉及 Docker 会容易得多。
原则上,您可以使用 Docker绑定挂载使主机目录对容器可见。但是,特别是对于一次性命令,启动容器所需的命令行长度将比您尝试运行的命令的长度长:
sudo \ # docker run can take over the host so root is required
docker run \
--rm \ # delete the container when done
-v "$PWD:/data" \ # make host directive visible to container
-w /data \ # make mounted directory current working directory
-u $(id -u):$(id -g) \ # write files as current host user
some-image-containing-protoc \
proton --dart-out=grpc:lib/src/generated -Iprotos protos/helloworld.proto
在您的主机系统上全局安装通常是一个命令(sudo apt-get install protobuf-compiler
, brew install protobuf
)protoc
,这通常更容易管理。