如何使用 docker-compose 使用服务器上的 env_file 部署到生产环境?

如何使用 docker-compose 使用服务器上的 env_file 部署到生产环境?

请看以下简化的示例:

services:
  app:
    image: alpine
    env_file: config.env
    entrypoint:
      - /bin/sh
      - -c
      - 'echo "Var is: $$MY_VAR"'

config.env在本地使用了本地开发设置,config.env在服务器上使用了生产设置。

当我使用 时,它会使用我本地的 config.env,而不是服务器上的 config.env。我宁愿不将特定于环境的配置存储在我的存储库中,但是 docker 文档中推荐的方法都涉及在您使用的同一台计算机上创建单独的文件或文件。docker-compose -H [email protected] up --build -d.yml.envdocker-compose

因此,我的问题是,如何在服务器上存储配置,并docker-compose在开发机器上使用配置进行部署?还是我最好将存储库上传到服务器并docker-compose在那里运行,以便可以使用远程环境文件?

答案1

我最终创建了自己的部署脚本,将 docker-compose 文件复制到服务器并使用服务器上的环境文件:

scp docker-compose.yml $USER@$HOST:/tmp/
deploy_cmd="export \$(grep -v '#.*' \"$REMOTE_ENV_FILE\" | xargs)";
deploy_cmd="$deploy_cmd && docker stack deploy -c /tmp/docker-compose.yml my-project";
echo "Deploying to $USER@$HOST"
ssh -qA "$USER@$HOST" "$deploy_cmd" || return 1;

相关内容