Python 3.x docker运行在“”处失败;蟒蛇3:can';t打开文件";

Python 3.x docker运行在“”处失败;蟒蛇3:can';t打开文件";,python-3.x,linux,docker,dockerfile,Python 3.x,Linux,Docker,Dockerfile,我的代码在目录/测试脚本中,详细结构如下 /test-scripts │___Dockerfile │ └───requirements.txt .... | └───IssueAnalyzer.py FROM python:3.6-buster ENV PROJECT_DIR=/testdocker WORKDIR $PROJECT_DIR COPY requirements.txt $PROJECT_DIR/. RUN apt-get update \ &&

我的代码在目录/测试脚本中,详细结构如下

/test-scripts
│___Dockerfile 
│
└───requirements.txt
....
|
└───IssueAnalyzer.py
FROM python:3.6-buster

ENV PROJECT_DIR=/testdocker

WORKDIR $PROJECT_DIR

COPY requirements.txt $PROJECT_DIR/.

RUN apt-get update \
    && apt-get -yy install libmariadb-dev

RUN pip3 install -r requirements.txt

COPY . $PROJECT_DIR/.

CMD ["python3", "/testdocker/IssueAnalyzer.py -u $user -p $pwd"]
在目录/测试脚本中运行以下命令

/测试脚本(主控)>

我的Dockerfile内容如下

/test-scripts
│___Dockerfile 
│
└───requirements.txt
....
|
└───IssueAnalyzer.py
FROM python:3.6-buster

ENV PROJECT_DIR=/testdocker

WORKDIR $PROJECT_DIR

COPY requirements.txt $PROJECT_DIR/.

RUN apt-get update \
    && apt-get -yy install libmariadb-dev

RUN pip3 install -r requirements.txt

COPY . $PROJECT_DIR/.

CMD ["python3", "/testdocker/IssueAnalyzer.py -u $user -p $pwd"]
使用上面的$user,$pwd替换此问题中的实际值。
在我看来,文件IssueAnalyzer.py将从当前目录/test scripts复制到/testdocker,但实际上并非如此。请帮助让我知道如何更改此Dockerfile。谢谢

有两种不同的方法来定义CMD:exec表单和shell表单

您正在使用exec表单,但未正确拆分命令

对于这种特殊情况,我建议使用shell形式:

[...]

CMD python3 /testdocker/IssueAnalyzer.py -u $user -p $pwd
如果确实要使用exec表单:

[...]

CMD ["python3", "/testdocker/IssueAnalyzer.py", "-u $user", "-p $pwd"]

参考资料:

请注意,这些方法产生的结果非常不同。第一种形式产生独立的参数
-u
$user
环境变量的值;第二种形式产生一个带有空格和美元符号且没有环境变量扩展的单参数
-u$user
。@Stefano,谢谢!现在可以了。但当我在另一台服务器上构建此docker映像时,它显示错误“INFO[0014]Cannot mkdir:/c4_working/testdocker不是目录”。但确切地说,此目录是在docker build之前创建的。详细信息错误信息:。。。步骤1:ENV PROJECT_DIR/c4_working/testdocker-->1d8ff08aa44d中运行-->b721272ea61b删除中间容器1d8ff08aa44d步骤2:WORKIR$PROJECT_DIR-->87e901d8928a中运行-->391ceb2614e6删除中间容器87e901d8928a步骤3:COPY requirements.txt$PROJECT_DIR/->7fbd830c1368删除中间容器b9a3f10a5045步骤4:运行apt get update&&apt get-yy install libmariadb dev-->在cadc9925b22f INFO[0014]中运行时无法运行mkdir:/c4_working/testdocker不是目录