docker-compose无法识别env_file文件/位置,仍然尝试使用默认的.env

时间:2016-09-17 04:39:46

标签: docker docker-compose

这是我的撰写文件dev.yml

version: '2'

volumes:
  rethinkdb_data_dev: {}

services:
  rethinkdb:
    image: rethinkdb:latest
    volumes:
      - rethinkdb_data_dev:/home/rethinkdb_data

  rabbitmq:
    image: rabbitmq:latest

  fumio:
    build:
      context: .
      dockerfile: ./compose/fumio_dev/Dockerfile
    depends_on:
      - rethinkdb
      - rabbitmq
    links:
      - rethinkdb
      - rabbitmq
    env_file: ./compose/fumio_dev/dev.env
    environment:
      - GIRLFRIEND_FUMIO_CONFIG=development
      - GIRLFRIEND_FUMIO_NOSQLDATABASE_HOST=rethinkdb
    ports:
      - "${GIRLFRIEND_FUMIO_PORT}:8001"

environment文件中的dev.yml是有意的,因此如果需要,我可以使用dev.env覆盖它们。

dev.env文件,位于compose/fumio_dev/文件夹内,相对于dev.yml文件。

GIRLFRIEND_FUMIO_PORT=8000

以下是我运行docker-compose -f dev.yml build

时会发生什么

enter image description here

如果我在根文件夹中提供.env文件,它运行正常,则docker-compose会忽略env_file的值并尝试使用默认的.env。所以docker-compose env_file在某种程度上不按预期工作或者我错过了什么?

我的docker-compose版本是1.8.0,我将它降级为1.7.1但仍然没有运气(使用pip安装)。

2 个答案:

答案 0 :(得分:15)

项目根目录中的Product(id, name) LineItem(id, product_id, order_id) Order(id, state) 文件和Compose文件中的SELECT products.id, products.price FROM "products" LEFT OUTER JOIN line_items ON line_items.product_id = products.id LEFT OUTER JOIN orders ON orders.id = line_items.order_id AND orders.status IN (1, 2) WHERE (products.price > 0) AND (orders.id IS NULL) AND "products"."id" = $1 GROUP BY products.id, products.price [["id", 11]] 字段是两个不同的概念。

.env用于设置撰写的默认环境。此文件中设置的值可以在Compose文件中使用。

env_file:字段用于设置容器的默认环境。在此设置的值可以在容器中使用,但不能在Compose文件中使用。

有关详细信息,请参阅https://docs.docker.com/compose/env-file/

答案 1 :(得分:1)

正如@dnephin 所解释的,

<块引用>

env_file: 字段用于设置容器的默认环境。在此设置的值可以在容器中使用,但不能在 Compose 文件中使用。

我还要注意的另一件事是您可以在执行命令时指定的 --env-file 标志,例如docker-compose --env-file ./somefile 和撰写文件中的 env_file 选项也完全不同。

--env-file 标志使您能够确定可在 Compose 文件中使用的自定义环境文件。

所以在你的情况下,我认为这个命令可以解决问题:

docker-compose --env-file ./compose/fumio_dev/dev.env -f dev.yml build