这是我的撰写文件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
如果我在根文件夹中提供.env
文件,它运行正常,则docker-compose会忽略env_file
的值并尝试使用默认的.env
。所以docker-compose env_file在某种程度上不按预期工作或者我错过了什么?
我的docker-compose版本是1.8.0,我将它降级为1.7.1但仍然没有运气(使用pip安装)。
答案 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