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

时间:2019-10-13 18:43:14

标签: docker docker-compose

我的应用程序依赖于我存储在文件夹.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. 我会用这种错误的方式吗?例如我可以通过.env

  3. 传递docker run IMAGE_NAME --env-file .env文件

编辑:

我的问题与运行图像的方式有关。我先做docker-compose build,然后做docker run IMAGE_NAME,并假设将卷构建到映像中。但是,事实并非如此。

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

1 个答案:

答案 0 :(得分:1)

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

构建过程本身会创建一个映像,您无需指定卷源。仅Dockerfile和您的构建上下文用作构建的输入。撰写文件的其余部分都是适用于容器的所有运行时设置。许多项目甚至都没有使用compose文件来构建图像,因此这些项目的compose文件中的所有设置都是为要创建的容器定义默认设置的一种方式。

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