Docker:带有参数和引号的入口点

mrb*_*t01 5 linux bash quotes docker

我正在尝试使用entrypoint.sh 创建一个Docker 映像,并在运行Docker 时传递参数,问题是当我想使用带双引号的参数时。

我在很多地方搜索,我也知道更多的是 Bash 问题以及如何通过双引号扩展参数,但也许有人知道如何避免这种情况。

我的Dockerfile

FROM centos:7

COPY    entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

我的entrypoint.sh

#!/bin/bash

command --display=true "$@"
Run Code Online (Sandbox Code Playgroud)

运行 Docker:

docker run -ti docker-image:latest --driver="kernel-4.0 kernel-4.1"
Run Code Online (Sandbox Code Playgroud)

预期行为:

command --display=true --driver="kernel-4.0 kernel-4.1"
Run Code Online (Sandbox Code Playgroud)

实际行为:

command --display=true --driver=kernel-4.0 kernel-4.1
Run Code Online (Sandbox Code Playgroud)

我尝试转义双引号,但什么也没有。

Adi*_*iii 4

\值之前你有尝试过逃跑吗?它正在和我一起工作。

#!/bin/bash
echo "all params $@"
command --display=true "$@"
Run Code Online (Sandbox Code Playgroud)

docker run -ti yourimage --driver=\"kernel-4.0 kernel-4.1\"

Run Code Online (Sandbox Code Playgroud)

正如@David 提到的,这是 bash 脚本的预期行为。

如果你entrypoint.sh在 Docker 之外运行,它将跳过引号。

./entrypoint.sh --driver="kernel-4.0 kernel-4.1"

#output

all params --driver=kernel-4.0 kernel-4.1
--display=true --driver=kernel-4.0 kernel-4.1
Run Code Online (Sandbox Code Playgroud)

如何在 Bash 参数中保留引号?