无法将带引号的字符串传递给Docker容器中的Python脚本。引号字符串被拆分为sys.argv向量的两个独立项。
Python脚本的预期行为如下。
在第一种情况下,只有一个项目“Hello World”,而当脚本在docker内部时,它是“Hello”,“World”。
我的示例dockerfile定义如下:
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
注意 所有上述组合也尝试了单引号(')。