无法将带引号的字符串传递给 Docker 容器内的 Python 脚本

3
无法将带引号的字符串传递给Docker容器中的Python脚本。引号字符串被拆分为sys.argv向量的两个独立项。
Python脚本的预期行为如下。
check.py --coverage 'Hello World' --blabla something
All Raw Arguments
['--coverage', 'Hello World', '--blabla', 'something']
All Args
Namespace(blabla='something', coverage='Hello World')

Print Coverage
Hello World

Print blabla
something

当我将同样的脚本放在Docker容器中,并使用docker run运行时,引号内的文本会被拆分为列表中的多个变量。

docker run --rm -i sample --coverage 'Hello World' --blabla something
All Raw Arguments
['--coverage', 'Hello', 'World', '--blabla', 'sometext']
usage: check.py [-h] [--coverage COVERAGE] [--blabla BLABLA]
check.py: error: unrecognized arguments: World

注意 当脚本正常运行和从 Docker 内部运行时,sys.argv 向量中的差异。

['--coverage', 'Hello World', '--blabla', 'something']
['--coverage', 'Hello', 'World', '--blabla', 'sometext']

在第一种情况下,只有一个项目“Hello World”,而当脚本在docker内部时,它是“Hello”,“World”。
我的示例dockerfile定义如下:
FROM sample_base

ENTRYPOINT ["/check.py"]
CMD ["--help"]

过去几个小时一直在苦思冥想。非常感谢任何帮助。

尝试了以下各种不同的组合。

docker run --rm -i sample '--coverage "Hello\\\ World" --blabla sometext'
docker run --rm -i sample --coverage "Hello\\\ World" --blabla sometext
docker run --rm -i sample --coverage "Hello\ World" --blabla sometext
docker run --rm -i sample --coverage \"Hello World\" --blabla sometext
docker run --rm -i sample --coverage \"\"Hello World\"\" --blabla sometext
docker run --rm -i sample --coverage "\"\"Hello World\"\"" --blabla sometext
export COVERAGE="Hello World"
docker run --rm -i sample --coverage $COVERAGE --blabla sometext
docker run --rm -i sample --coverage ${COVERAGE} --blabla sometext
docker run --rm -i sample --coverage "$COVERAGE" --blabla sometext
docker run --rm -i sample --coverage "${COVERAGE}" --blabla sometext

注意 所有上述组合也尝试了单引号(')。

2个回答

2
尝试这个:
docker run --rm -i sample sh -c '/check.py --coverage $COVERAGE --blabla sometext'
或者 bash

如果$COVERAGE是一个实际的SQL语句,带有参数='value'?:/ - Ewoks

0

你也试过 docker run --rm -i sample --coverage "\"Hello World\"" --blabla sometext 吗?

我在使用 Docker 时也遇到了一些空格的问题,即使代码解释器将其标记为错误,我仍然不得不转义引号。


也尝试了这个。上面示例中的第6个与此类似。为了双重检查,尝试了确切的内容,但仍然失败了。 - Arun Thundyill Saseendran
你能告诉我你的Docker版本是多少吗?因为我正在使用v17.12.0-ce进行测试,并尝试使用Python脚本模拟您的情况作为容器的入口点,并以以下方式执行它:docker run -it gomod/alpine --opt "no hello world"它将“no hello world”作为第三个命令行参数接收。@ArunThundyillSaseendran - IFebles
请访问https://labs.play-with-docker.com/,并尝试使用此版本进行实现。 - IFebles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接