Docker:构建后文件丢失

问题描述 投票:0回答:2

我正在尝试构建一个运行 Python 脚本的 docker 容器。我希望在构建映像时从 git 克隆代码。我使用 this docker 文件作为基础,并在第一行之前添加以下内容:

FROM debian:buster-slim AS intermediate

RUN apt-get update
RUN apt-get install -y git

ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa

RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan [git hostname] >> /root/.ssh/known_hosts

RUN git clone git@...../myApp.git

...然后在第一行之后直接添加以下内容:

# Copy only the repo from the intermediate image
COPY --from=intermediate /myApp /myApp

...最后我添加了这个来安装一些依赖项:

RUN set -ex; \
    apt-get update; \
    apt-get install -y gcc g++ unixodbc-dev libpq-dev; \
    \
    pip install pyodbc; \
    pip install paramiko; \
    pip install psycopg2

我将运行命令更改为:

CMD ["python3 /myApp/main.py"]

如果在 CMD 之前的 dockerfile 末尾添加命令“RUN ls -l /myApp”,它会列出我在构建过程中期望的所有文件。但是当我使用“docker run”运行图像时,它给了我以下错误:

docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:”python3 /myApp/main.py”:stat python3 /myApp/main.py:没有这样的文件或目录”:未知。

我的构建命令是:

docker build --file ./Dockerfile --tag my_app --build-arg SSH_PRIVATE_KEY="$(cat sshkey)" .

然后用

docker run my_app

运行

可能有一些我误解的docker基础知识,但我似乎无法弄清楚它是什么。

python-3.x docker
2个回答
1
投票

如果没有命令行或 docker-compose.yml(如果有),这个问题很难回答。一个经常出现的错误是将卷从主机映射到容器的非空位置,在这种情况下,您的容器文件被主机文件夹的内容隐藏。

最后的CMD应该是这样的:

CMD ["python3", "/myApp/main.py"]

0
投票

这也发生在我身上 - 我找到了解决方案,但我并不完全理解为什么会发生这种情况。 docker镜像源代码是从git拉取的,由于某种原因,

.gitignore
中指定的所有文件和目录都没有添加。

为了解决这个问题,我删除了所有 git 相关信息(最重要的是

.gitignore
)并运行了另一个构建。 这次所有文件都已添加,没有出现
FileNotFound
错误。

© www.soinside.com 2019 - 2024. All rights reserved.