在只读卷中装载文件(其中源位于 .dockerignore 中)



我的应用程序依赖于我存储在文件夹.credentials中的机密(例如.credentials/.env.credentials/.google_api.json等(我不希望这些文件内置到 docker 映像中,但是它们需要对 docker 容器可见。

我的解决方案是:

  • .credentials添加到我的 .dockerignore
  • 使用卷以只读模式挂载凭据文件夹:
# docker-compose.yaml
version: '3'
services:
app:
build: .
volumes:
- ./.credentials:/app/.credentials:ro
  1. 这是行不通的(我在 docker 容器内看不到任何凭据(。我想知道.dockerignore是否导致音量中断,或者我是否做错了其他事情?

  2. 我这样做的方式是错误的吗?例如,我可以传递带有docker run IMAGE_NAME --env-file .env.env文件

编辑:

我的问题与我如何运行映像有关。我做了docker-compose build然后docker run IMAGE_NAME,假设卷是内置到映像中的。然而,情况似乎并非如此。

相反,当我在构建后执行docker-compose run app(其中应用程序是服务名称(时,上面的代码有效

从注释中,这里的问题是在使用docker run启动容器时查看容器定义的docker-compose.yml文件。docker run命令不使用撰写文件,因此未在生成的容器上定义任何卷。

生成过程本身会创建一个映像,其中不指定卷的源。只有 Dockerfile 和生成上下文用作生成的输入。撰写文件的其余部分都是应用于容器的运行时设置。许多项目甚至不使用撰写文件来生成映像,因此这些项目的撰写文件中的所有设置都是为正在创建的容器定义默认设置的一种方式。

解决方案是使用docker-compose up -d来测试您的docker-compose.yml

最新更新