需要指导创建临时 docker 容器以在主机上生成文件

问题描述

我想创建一个可以读取名为 helloworld.proto文件并运行命令的 docker 容器

protoc --dart_out=grpc:lib/src/generated -Iprotos protos/helloworld.proto

容器将从所有依赖项开始,并使用主机可访问的 gRPC 生成所需文件。这可以实现吗?

解决方法

如果您的进程的主要目标是从主机系统读取文件并将文件写回主机系统,您会发现直接在主机系统上运行该进程而不涉及 Docker 会容易得多。

原则上您可以使用 Docker bind mounts 使主机目录对容器可见。但是,特别是对于一次性命令,启动容器所需的命令行长度将比您尝试运行的命令的长度长:

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,这通常更易于管理。