【发布时间】:2019-11-22 20:11:33
【问题描述】:
我有一个使用 Docker Compose 设置的项目。当我或我团队中的任何人从事该项目时,让一切运行起来只需docker-compose up。我们还有一个与生产环境关联的 Docker Machine(“默认”)。所以我们只需要通过以下方式连接到机器:
eval "$(docker-machine env default)"
现在部署与让一切在本地运行完全一样。只是一个docker-compose up。我喜欢这个!
但是,Compose 配置现在分为三个文件:
-
docker-compose.yml:一般的东西。适用于生产环境和本地环境。 -
docker-compose.override.yml:仅适用于本地环境。 -
docker-compose.production.yml:仅适用于生产环境。
方便的是,docker-compose 会自动读取docker-compose.yml 和docker-compose.override.yml,因此在本地环境中我们仍然可以运行docker-compose up 而无需额外的参数。在生产环境中,我们需要明确:
docker-compose -f docker-compose.yml -f docker-compose.production.yml up
这更加冗长,当您习惯于简单地运行docker-compose up 时,很容易忘记附加参数。我从以前获得了无缝体验:使用单个命令连接到机器,然后像在本地环境中一样使用相同的命令。
我发现您可以通过设置环境变量COMPOSE_FILE 使 docker-compose 默认为一组不同的配置文件。所以我现在的首选解决方案是在连接到机器时运行 两个 命令:
eval $(docker-machine env default)
export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"
这行得通!我可以像以前一样在生产环境中运行docker-compose up。
由于eval $(docker-machine env default) 也只是注册环境变量,我想知道是否可以永久添加这一行:
export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"
进入docker-machine env default 的输出,所以当我想连接到机器时,我会返回运行single 命令。
如果这是不可能的(我找不到来源),是否有不同的方法来解决这个问题?
当然,我可以编写一个简单地包含两个命令的 shell 脚本,但我更喜欢惯用的解决方案。
【问题讨论】:
标签: docker docker-compose docker-machine