我的应用程序依赖于我存储在文件夹.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
是导致音量中断还是我做错了其他事情?
我会用这种错误的方式吗?例如我可以通过.env
docker run IMAGE_NAME --env-file .env
文件
编辑:
我的问题与运行图像的方式有关。我先做docker-compose build
,然后做docker run IMAGE_NAME
,并假设将卷构建到映像中。但是,事实并非如此。
当我在构建后执行docker-compose run app
(其中app是服务名称)时,上面的代码有效。
答案 0 :(得分:1)
根据评论,这里的问题是在以docker-compose.yml
启动容器时查看容器定义的docker run
文件。 docker run
命令不使用撰写文件,因此在生成的容器上未定义任何卷。
构建过程本身会创建一个映像,您无需指定卷源。仅Dockerfile和您的构建上下文用作构建的输入。撰写文件的其余部分都是适用于容器的所有运行时设置。许多项目甚至都没有使用compose文件来构建图像,因此这些项目的compose文件中的所有设置都是为要创建的容器定义默认设置的一种方式。
解决方案是使用docker-compose up -d
测试您的docker-compose.yml
。