我的应用程序依赖于我存储在文件夹.credentials
中的机密(例如.credentials/.env
、.credentials/.google_api.json
等(我不希望这些文件内置到 docker 映像中,但是它们需要对 docker 容器可见。
我的解决方案是:
- 将
.credentials
添加到我的 .dockerignore - 使用卷以只读模式挂载凭据文件夹:
# docker-compose.yaml
version: '3'
services:
app:
build: .
volumes:
- ./.credentials:/app/.credentials:ro
这是行不通的(我在 docker 容器内看不到任何凭据(。我想知道
.dockerignore
是否导致音量中断,或者我是否做错了其他事情?我这样做的方式是错误的吗?例如,我可以传递带有
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
。