Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个参数传递给docker容器_Python_Docker - Fatal编程技术网

Python 将多个参数传递给docker容器

Python 将多个参数传递给docker容器,python,docker,Python,Docker,我正在尝试将两个参数传递给dash应用程序的docker容器(通过shell脚本)。传递一个参数有效,但传递两个参数无效。下面是传递两个参数时发生的情况: 命令: sudo sh create_dashboard.sh 6 4 错误: creating docker Running for parameter_1: 6 Running for parameter_2: 4 usage: app.py [-h] [-g parameter_1] [-v parameter_2] app.py

我正在尝试将两个参数传递给dash应用程序的docker容器(通过shell脚本)。传递一个参数有效,但传递两个参数无效。下面是传递两个参数时发生的情况:

命令:

sudo sh create_dashboard.sh 6 4
错误:

creating docker
Running for parameter_1: 6 
Running for parameter_2: 4 
usage: app.py [-h] [-g parameter_1] [-v parameter_2]
app.py: error: argument -g/--parameter_1: expected one argument
shell脚本:

echo "creating docker"
docker build -t dash-example .
echo "Running for parameter_1: $1 "
echo "Running for parameter_2: $2 "
docker run --rm -it -p 8080:8080 --memory=10g dash-example $1 $2
Dockerfile:

FROM python:3.8

WORKDIR /app
COPY src/requirements.txt ./
RUN pip install -r requirements.txt
COPY src /app
EXPOSE 8080
ENTRYPOINT [ "python", "app.py", "-g", "-v"]
使用此命令时:

sudo sh create_dashboard.sh 6

docker容器运行良好,参数_2为None。

您可以将命令传递到容器的外壳中,如下所示:

docker run--rm-it-p8080:8080短跑示例sh-c”--内存=10g短跑示例$1$2”

因此它允许参数和任何其他命令。

当您运行docker时。。。破折号示例$1$2,附加参数被解释为容器应运行的“命令”。由于您的图像有一个
入口点
,因此该命令的单词只会固定在入口点单词的末尾(请参见Dockerfile文档中的内容)。没有办法使一个命令的文字与另一个命令的文字相互交错;您实际上得到了一个

python app.py-g-v6 4
我在这里推荐的方法是根本不使用
入口点。确保可以直接运行应用程序脚本(它的第一行应该是
#!/usr/bin/env python3
,它应该是可执行的),并将映像的默认值
CMD
设置为运行脚本:

来自python:3.9的

...
#如果需要,运行chmod+x app.py
#根本没有入口点
CMD[“/app.py”]#通过shebang行查找“python”
然后,包装器可以提供完整的命令行,包括需要运行的选项:

#/垃圾箱/垃圾箱
docker run--rm-it-p8080:8080--memory=10g短跑示例\
./app.py-g“$1”-v“$2”

(有一个备用的“容器作为命令”模式,其中
ENTRYPOINT
包含要运行的命令和
CMD
的选项。这可能会导致用于例行调试任务的笨拙的
docker run--ENTRYPOINT
命令行,如果命令本身很短,则不会真正为您节省很多。您仍然需要重复
-g
-v
包装中的选项。)

您的入口点与命令行应用程序的语法不匹配。从中删除
-g
-v
,并将包括值在内的两个参数添加到实际调用中。您可以尝试
docker运行--rm-it-p 8080:8080 sh-c”-memory=10g破折号示例$1$2”
@lewislbr这是一个新错误:
为参数_1:6运行为参数_2:4运行无法在本地找到映像“sh:latest”docker:来自守护程序的错误响应:拒绝sh的拉取访问,存储库不存在或可能需要“docker登录”:拒绝:拒绝请求的资源访问。
@klauds。你能详细解释一下吗?我的错,那将是
docker-run-rm-it-p8080:8080短跑示例sh-c”--内存=10g短跑示例$1$2“