【发布时间】:2020-04-27 08:21:41
【问题描述】:
我想使用 Docker 容器来运行使用本地文件的实用程序(特别是 Terraform)。为了快速迭代代码(比如my_stuff.tf)我想绑定挂载我的工作目录。但是,我想考虑一些相对稳定和静态的东西,例如插件。基本上我希望通过三种方式来处理事情:
-
.terraform/是稳定的东西,应该存在于容器中,但不存在于我的主机目录中,但即使在挂载后也需要保留。 -
my_stuff.tf存在于容器中(因为init需要它)和主机目录中(因为我想编辑它)。我希望我的主机目录版本覆盖容器版本。 -
terraform.tfstate可能在任何一个开始时都不存在,但会在运行期间生成。我希望它一旦存在就保留在我的主机目录中。
(我猜是第四类,比如README.md,我不在乎它是否存在)
在我的例子中,TF 期望配置插件的.terraform/ 和terraform.tfstate(我想用绑定挂载捕获的输出之一)位于同一个目录中,所以我不能只使用不同的目录对于容器内部的东西和绑定安装的东西。
# Dockerfile
FROM plugin_source AS plugins
FROM terraform_base
COPY --from=plugins terraform-provider-X /bin/
COPY my_stuff.tf /app/
WORKDIR /app
RUN /bin/terraform init
还有我的运行命令:
docker run --rm -i -t --mount source=$PWD,target=/app,type=bind my_terraform <some-tf-command>
如https://docs.docker.com/storage/bind-mounts/#mount-into-a-non-empty-directory-on-the-container 中所述,是否有一种巧妙的方法可以使绑定挂载的行为与命名卷在首次初始化时的行为方式相同?目前,似乎我可能需要编写一个小入口点脚本,将稳定的东西符号链接到我的工作目录中。
【问题讨论】:
标签: docker