首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用绑定挂载语法在Docker卷路径中转义引号和逗号

使用绑定挂载语法在Docker卷路径中转义引号和逗号
EN

DevOps用户
提问于 2022-09-26 23:29:23
回答 1查看 663关注 0票数 0

为了让我编写尽可能多的防弹脚本,这些脚本不会与可能的边缘情况(无论多么不可能)中断,我如何使用--mount语法避开Docker绑定挂载路径中的逗号和引号?

请注意,装订安装上的码头文件说每个人都“被鼓励使用”--mount而不是-v,但是对于-v,我有一个类似的问题,如何在路径中避开:

例如,

代码语言:javascript
复制
cd /Users/name
mkdir te,\"st
touch te,\"st/file.txt
docker run -it --rm --mount 'type=bind,source=/Users/name/te??st,target=/usr/test' alpine ash

Wher e??需要是逗号,和上面创建的te,"st目录中的双引号"

  • 我尝试用双引号包装source=后的值,以测试它是否会接受逗号,但得到错误bare " in non-quoted-field。这种尝试是基于Docker存储卷文档的选择-v或-挂载标志部分中的信息框“外部CSV解析器的逃逸值”。但这个领域显然不喜欢双引号,从来没有。
  • 单引号、双逗号和卷路径中的反斜杠似乎不起作用,出现了诸如invalid field 'st' must be a key=value pair之类的错误。
  • 有了这个,我猜不出来了。我在黑暗中尝试了几个随机的刺,看看Docker是否会做环境变量扩展而不是shell,但是什么也没有起作用。

是否根本不可能使用包含逗号或双引号的路径或卷的名称?我是否可以指示Docker以某种方式使用环境变量,从而使环境变量展开而不是shell?

或者,我是否需要使用compose.yaml文件来克服这个限制,这样我就可以以不同的编码/格式显示挂载的部件/部分了吗?

EN

回答 1

DevOps用户

发布于 2022-09-30 20:09:42

如果您有一个名为te,"st的目录,那么使用-v很简单:只需引用它,请记住,如果双引号中有双引号,则需要转义它。因此,这是可行的:

代码语言:javascript
复制
$ mkdir te,\"st
$ touch te,\"st/file1
$ docker run --rm -v "$PWD/te,\"st:/data" alpine ls /data
file1

--mount来说,这有点棘手。从https://github.com/docker/cli/issues/1480中我们知道,对--mount的参数是使用CSV语法解析的,因此我们可以使用典型的CSV转义来获取事物(包含逗号的引号字段和双引号转义引号("")):

代码语言:javascript
复制
$ docker run --rm --mount "type=bind,\"src=$PWD/te,\"\"st\",target=/data" alpine ls /data
file1
票数 2
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/16652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档