即使在docker中添加文件后也找不到文件

时间:2018-12-31 22:48:54

标签: python python-3.x docker pachyderm

我写了一个docker文件,将我的python脚本添加到了容器中: ADD test_pclean.py /test_pclean.py

我的目录结构是:

.
├── Dockerfile
├── README.md
├── pipeline.json
└── test_pclean.py

用作在Pachyderm中创建管道的配置文件的json文件如下:

{
    "pipeline": {
        "name": "mopng-beneficiary-v2"
    },
    "transform": {
        "cmd": ["python3", "/test_pclean.py"],
        "image": "avisrivastava254084/mopng-beneficiary-v2-image-7"
    },
    "input": {
        "atom": {
            "repo": "mopng_beneficiary_v2",
            "glob": "/*"
        }
    }
}

即使我复制了官方文档的示例,也遇到了错误: python3: can't open file '/test_pclean.py': [Errno 2] No such file or directory

我的dockerfile是:

FROM    debian:stretch

# Install opencv and matplotlib.
RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y unzip wget build-essential \
        cmake git pkg-config libswscale-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt

RUN apt update
RUN apt-get -y install python3-pip
RUN pip3 install matplotlib
RUN pip3 install pandas

ADD test_pclean.py /test_pclean.py
ENTRYPOINT [ "/bin/bash/" ]

2 个答案:

答案 0 :(得分:1)

就像上面的一些评论所示。看来您的test_pclean.py文件不在docker映像中。这是应该解决的问题。

  1. 确保将test_pclean.py文件包含在您的docker映像中,方法是将其包含在构建过​​程中。将其作为泊坞窗文件的最后一步:

COPY test_pclean.py .

  1. 确保cmd部分的厚皮管道规范具有以下内容: "cmd": ["python3", "./test_pclean.py"]

  2. 这更多的是建议,而不是要求。...如果将图像标签用作Docker构建的一部分,您将可以使自己的生活更轻松。如果您默认使用latest标签,那么管道中此步骤的任何将来的迭代/构建都可能产生负面影响(代码中的新错误等)。因此,最佳实践是在管道中使用特定版本:mopng-beneficiary-v2-image-7:v1mopng-beneficiary-v2-image-7:v2,依此类推。这样,您可以迭代说版本3,并且不会影响已经在运行的管道。

docker build -t avisrivastava254084/mopng-beneficiary-v2-image-7:v1

然后只需更新您的管道规范以使用avisrivastava254084/mopng-beneficiary-v2-image-7:v1

答案 1 :(得分:-1)

我没有在每个构建上更改对docker映像的提交,因此,Kubernetes使用的是它具有的本地docker文件(不带标签和提交,它不确认任何更改)。当我开始在每个构建中使用commit时,Kubernetes开始下载所需的docker映像。