我有一个非常简单的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配置文件的目录展开。相对路径应始终以
.
或..
开头
我认为这有两个原因:
-
docker-compose
无法找到在这种情况下如何扩展.
的简单方法和客观方法,因为无法知道.
对ssh客户端(home?same folder?(意味着什么。 -
即使
docker
cli使用不同的上下文,扩展也是由docker-compose
工具完成的,它不知道上下文切换。
即使使用环境变量也可能带来问题,因为env扩展也会发生在运行docker-compose
命令的机器中。