为了让我编写尽可能多的防弹脚本,这些脚本不会与可能的边缘情况(无论多么不可能)中断,我如何使用--mount语法避开Docker绑定挂载路径中的逗号和引号?
请注意,装订安装上的码头文件说每个人都“被鼓励使用”--mount而不是-v,但是对于-v,我有一个类似的问题,如何在路径中避开:。
例如,
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 ashWher e??需要是逗号,和上面创建的te,"st目录中的双引号"。
source=后的值,以测试它是否会接受逗号,但得到错误bare " in non-quoted-field。这种尝试是基于Docker存储卷文档的选择-v或-挂载标志部分中的信息框“外部CSV解析器的逃逸值”。但这个领域显然不喜欢双引号,从来没有。invalid field 'st' must be a key=value pair之类的错误。是否根本不可能使用包含逗号或双引号的路径或卷的名称?我是否可以指示Docker以某种方式使用环境变量,从而使环境变量展开而不是shell?
或者,我是否需要使用compose.yaml文件来克服这个限制,这样我就可以以不同的编码/格式显示挂载的部件/部分了吗?
发布于 2022-09-30 20:09:42
如果您有一个名为te,"st的目录,那么使用-v很简单:只需引用它,请记住,如果双引号中有双引号,则需要转义它。因此,这是可行的:
$ 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转义来获取事物(包含逗号的引号字段和双引号转义引号("")):
$ docker run --rm --mount "type=bind,\"src=$PWD/te,\"\"st\",target=/data" alpine ls /data
file1https://devops.stackexchange.com/questions/16652
复制相似问题