gpt4 book ai didi

docker - docker :构建镜像后没有此类文件或目录

转载 作者:行者123 更新时间:2023-12-02 19:28:22 29 4
gpt4 key购买 nike

我刚刚开始阅读本教程,并尝试将我的一些代码包装到docker中。您可能对这个问题感到耳熟,因为我可以看到非常相似的威胁,但不幸的是我无法理解,所以决定在这里写下。

我已经使用python制作了电报聊天机器人。所有文件都在/project/下。我在/project/ calledDockerTelegramChatBot下有另一个文件夹,其中有Dockerfile。

DockerTelegramChatbot内部,我有两个文件Dockerfilerequirements.txt
Dockerfile的内容如下所示

# Use an official Python runtime as a parent image
FROM python:3.6-stretch

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app
ADD . .

# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt --default-timeout=100

# Make port 80 available to the world outside this container
EXPOSE 80

# Run app.py when the container launches
CMD pwd

CMD ls
CMD python /app/main_bot.py

我使用建立图像
docker build -t simpletelegramchatbot DockerTelegramChatBot/

并运行它
docker run -p 4000:80 simpletelegramchatbot

主要问题是如何解决“构建镜像后没有此类文件或目录”的问题。但是,我也想知道解决这种情况的最佳实践是什么,如果我编辑dockerfile,是否每次都要从头开始构建它? “pip安装要求”需要花费几分钟,并使整个过程变得很烦人。

最佳答案

The main question is how I can resolve the “No such file or directory after building the image”.



构建镜像后,可以直接基于镜像启动容器,该容器运行交互式 shell 程序,而不是Dockerfile中的CMD:
docker run --rm -it simpletelegramchatbot bash

(注意:如果您常规使用ENTRYPOINT而不是CMD,则此命令行不起作用,这是我建议将CMD设置为默认值的两个原因之一。)

当您运行 docker build时,在每个步骤之后,输出还将包含一个较长的十六进制数字。这些是有效的镜像ID,例如,可以在COPY步骤之后立即在中间镜像上获取一个shell,从而可以在 docker run命令中使用它们来查看生成中间的情况。

当您描述了项目布局时,听起来像是:
/project/
+-- main_bot.py
\-- DockerTelegramChatBot/
+-- Dockerfile
\-- requirements.txt

因此,当您运行 docker build DockerTelegramChatBot时,它只会看到该子目录,并且如果您浏览生成的图像,则可能只会看到 requirements.txt文件。由于内部构建机制的原因,Docker实际上不可能访问父目录中的文件。解决这个问题非常简单:只需将两个文件移至父目录即可。

if I edit the dockerfile, do I have to build it from scratch every time ? “pip install requirements” takes a few minutes



是;但是,如果先前的 docker build从相同的镜像开始并运行相同的命令,则Docker将跳过一个步骤。这称为层缓存。至关重要的是,如果其中涉及的任何文件发生更改,则任何COPY或ADD步骤都将中断层缓存。

一种非常常见的模式是复制少量文件,这些文件描述了如何获取需求( requirements.txtpackage.jsonGemfile,...),安装需求,然后安装其余的源代码。如果 pip install文件更改,这将导致Docker仅重新运行 requirements.txt步骤。您的Dockerfile可能如下所示:

FROM python:3.6-stretch
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt --default-timeout=100
COPY . ./
EXPOSE 80
CMD ["./main_bot.py"]

关于docker - docker :构建镜像后没有此类文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54037676/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com