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



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

version: '2.4'
services:
containername:
image: ${DOCKER_IMAGE}
volumes:
- ./config:/root/config

我使用的是通过ssh:访问的远程暂存服务器

docker context create staging --docker "host=ssh://ubuntu@staging.example.com"
docker context use staging

然而,在我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"
}
],
...

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

我可以通过对整个路径进行硬编码来解决这个问题:/home/ubuntu/config:/root/config。但这让我的docker编写文件的灵活性比它可能的要低一些。有没有办法让点扩展在远程机器上发生?

不,文档说:

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

我认为这有两个原因:

  1. docker-compose无法找到在这种情况下如何扩展.的简单方法和客观方法,因为无法知道.对ssh客户端(home?same folder?(意味着什么。

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

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

最新更新