如何在 docker-compose up 期间将文件内容复制到服务?

wob*_*ano 4 docker docker-compose

我有2个文件:

.env
docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml 看起来像这样:

version: '3'

services:
  database:
    image: mysql:5.7
  myapp:
    image: me/some-image
    depends_on:
      - database
    env_file: .env
Run Code Online (Sandbox Code Playgroud)

myapp 是一个 Web 服务应用程序,需要 .env 文件,或者如果不存在 .env 文件,它可以选择访问环境变量。

截至目前, myapp 正在访问环境变量,因为出于安全原因我不希望 .env 文件包含在映像构建中。我所做的是将 a 传递env_file: .env给文件中的 myapp 服务docker-compose.yml,以便它将依赖于服务的环境变量而不是 .env 文件。

现在,我真的想在运行时向 myapp 服务添加一个 .env 文件docker-compose up。请注意,如果 myapp Web 服务未找到 .env 文件,则会抛出错误,并且选项是查找 .env 文件,而不是从容器的环境变量中获取。

有没有办法在运行时创建 .env 文件docker-compose up并在主机上复制 .env 文件的内容?先感谢您。

Pia*_*kaa 6

您可以使用bind mount将文件挂载到容器中

将目标位置更改为您的应用程序所需的位置

version: '3'

services:
  database:
    image: mysql:5.7
  myapp:
    image: me/some-image
    depends_on:
      - database
    env_file: .env
    volumes:
      - type: bind
        source: ./.env
        target: /envfile/.env
        readonly: true
Run Code Online (Sandbox Code Playgroud)