Docker-compose,远程上下文,相对于本地机器而不是远程的路径

Cru*_*mmy 7 yaml docker docker-compose

我有一个非常简单的 docker-compose.yml:

version: '2.4'

services:
  containername:
    image: ${DOCKER_IMAGE}
    volumes:
      - ./config:/root/config
Run Code Online (Sandbox Code Playgroud)

我正在使用通过 ssh 访问的远程登台服务器:

docker context create staging --docker "host=ssh://ubuntu@staging.example.com"
docker context use staging
Run Code Online (Sandbox Code Playgroud)

但是,在我执行docker-compose up以下操作后,我的音量出现了意外结果:

docker-compose --context staging up -d
docker inspect containername
...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/crummy/code/.../config",
                "Destination": "/root/config",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
...
Run Code Online (Sandbox Code Playgroud)

似乎扩展./config到完整路径发生在 docker-compose 运行的机器上。不是运行 Docker 的机器。

我可以通过硬编码的整个路径解决这个问题:/home/ubuntu/config:/root/config。但这使我的 docker-compose 文件变得不那么灵活。有没有办法让点扩展发生在远程机器上?

Gus*_*oto 5

不,文档说

您可以在主机上挂载一个相对路径,该路径相对于正在使用的 Compose 配置文件的目录展开。相对路径应始终以.或开头..

我认为这有两个原因:

  1. 没有简单的方法和客观的方法docker-compose可以找出.在这种情况下如何扩展,因为无法知道.对 ssh 客户端(主目录?同一个文件夹?)意味着什么。

  2. 即使dockercli 使用不同的上下文,扩展也是由docker-compose工具完成的,它不知道上下文切换。

即使使用环境变量也可能会带来问题,因为 env 扩展也会发生在您运行docker-compose命令的机器上。