【发布时间】:2017-01-19 12:19:24
【问题描述】:
我面临的问题是如何将带有参数的命令传递给docker run。问题是docker run 不将命令加参数作为单个字符串。它们需要作为单独的一等参数提供给docker run,例如:
#!/bin/bash
docker run --rm -it myImage bash -c "(cd build && make)"
但是将命令和参数视为变量的值:
#!/bin/bash -x
DOCKER_COMMAND='bash -c "(cd build && make)"'
docker run --rm -it myImage "$DOCKER_COMMAND"
很遗憾,这不起作用,因为 docker run 不理解替换:
+ docker run --rm -it myImage 'bash -c "(cd build && make)"'
docker: Error response from daemon: oci runtime error: exec: "bash -c \"(cd build && make)\"": stat bash -c "(cd build && make)": no such file or directory.
稍作改动,去掉DOCKER_COMMAND的引用:
#!/bin/bash -x
DOCKER_COMMAND='bash -c "(cd build && make)"'
docker run --rm -it myImage $DOCKER_COMMAND
结果:
+ docker run --rm -it myImage 'bash -c "(cd build && make)"'
build: -c: line 0: unexpected EOF while looking for matching `"'
build: -c: line 1: syntax error: unexpected end of file
如何从变量中扩展字符串,以便将其作为不同的命令和参数传递给脚本内的docker run?
【问题讨论】:
-
我认为你应该把你的问题降到最低限度。 (例如,为什么涉及 docker 很重要。)对我来说,这听起来像:“如何使用环境变量将参数解析到我的脚本。”
-
@MichaWiedenmann 感谢您的评论。实际上更多的是关于 Docker 如何接受参数,以及如何从环境变量中提取这些参数。这通常不会出现,因为大多数命令可以从带引号的字符串构建,但 docker 需要单独的参数。我会添加一些背景。
-
@MichaWiedenmann 好的,我已经大大简化了。
标签: linux bash shell docker variable-expansion