无法将带引号的字符串传递给docker容器中的python脚本

无法将带引号的字符串传递给docker容器中的python脚本,python,docker,escaping,double-quotes,Python,Docker,Escaping,Double Quotes,无法将带引号的字符串传递给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', coverag

无法将带引号的字符串传递给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 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
同样的脚本,当我把它放在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
注意脚本正常运行时sys.argv向量与docker中的差异

['--coverage', 'Hello World', '--blabla', 'something']
['--coverage', 'Hello', 'World', '--blabla', 'sometext']
在第一个实例中,它只是一个项目“Hello World”,而当脚本在docker中时,它是“Hello”,“World”

我的dockerfile定义示例如下

FROM sample_base

ENTRYPOINT ["/check.py"]
CMD ["--help"]
在过去的几个小时里,我的头都碎了。非常感谢您的帮助

尝试了以下所有不同的组合

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 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

注意上述所有组合都使用单引号(')进行了尝试。

您是否也尝试过
docker run--rm-i示例--coverage“\'Hello World\”--blabla sometext

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

尝试以下方法:

docker run--rm-i sample sh-c'/check.py--coverage$coverage--blablabla sometext'


或者
bash

也尝试了这个。上述样本中的第6个与此类似。为了再次检查,尝试了完全相同的版本,但仍然失败。你能告诉我你的docker版本是什么吗?因为我在用v17.12.0-ce进行测试,试图用python脚本作为容器的入口点来模拟您的案例,并以这种方式执行:
docker run-it gomod/alpine--opt“no hello world”
,它收到了全文
no hello world
,作为第三个命令行参数@ArunthundyillsAseendranche检查并使用此版本尝试您的实现,如果$COVERAGE是一个实际的SQL语句,参数为='value'?:/