连接到专用Docker Machine时如何默认为Docker Compose生产配置?

问题描述 投票:0回答:1

我有一个使用Docker Compose设置的项目。当我或我的团队中的任何人从事该项目时,使一切正常运行就很容易了。我们还具有与生产环境关联的Docker Machine(“默认”)。所以我们只需要通过以下方式连接到机器:

docker-compose up

现在,部署与使一切都在本地运行完全相同。只是eval "$(docker-machine env default)" 。我喜欢这个!

但是,现在Compose配置被分为三个文件:

  • docker-compose up:常规内容。适用于生产环境和本地环境。
  • docker-compose.yml:仅适用于本地环境。
  • docker-compose.override.yml:仅适用于生产环境。

[方便地,docker-compose会自动读取docker-compose.production.ymldocker-compose.yml,因此在本地环境中,我们仍然可以运行docker-compose.override.yml而无需其他参数。在生产环境中,我们需要明确:

docker-compose up

这更冗长,当您习惯只运行docker-compose -f docker-compose.yml -f docker-compose.production.yml up 时,很容易忘记其他参数。我曾经有过无缝的经验:使用单个命令连接到计算机,然后使用与本地环境中相同的命令。

我发现您可以通过设置环境变量docker-compose up使docker-compose默认为另一套配置文件。因此,到目前为止,我的首选解决方案是在连接到计算机时运行two命令:

COMPOSE_FILE

这有效!我可以像以前一样在生产环境中运行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" 的输出,因此当我想连接到计算机时,我返回运行single命令。

如果这不可能(我找不到来源),是否有其他方法可以解决此问题?

当然,我可以编写一个仅包含两个命令的shell脚本,但我希望使用惯用的解决方案。

docker docker-compose docker-machine
1个回答
0
投票

如果仅在没有docker-machine env default包装程序的情况下运行docker-compose env命令,它将写出一系列Shell命令。您可以将其与另一个运行eval的脚本进行包装,并添加其他设置

docker-compose env

如果运行此脚本

#!/bin/sh
# I am docker_production
docker-compose env default
echo 'export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"'
echo 'PS1="PRODUCTION $PS1"'

它会打印出设置环境的shell命令;使其真正生效,您可以

./docker_production

以同样的方式,您可以编写一个输出命令来撤消此命令的shell脚本

eval $(./docker_production)
#!/bin/sh
# I am docker_development
docker-compose env -u
echo 'unset COMPOSE_FILE'
echo 'PS1="${PS1#PRODUCTION }"'
© www.soinside.com 2019 - 2024. All rights reserved.