【问题标题】:No such file or directory error when running Docker container运行 Docker 容器时没有此类文件或目录错误
【发布时间】:2021-07-06 17:35:02
【问题描述】:

我有一个用于 Flask 应用程序的 REST Api,该应用程序带有一个我使用 Oracle Instant Client 的 Oracle 数据库。

我设法从我的计算机上运行了该应用程序,它运行良好,我的任务是为这个应用程序制作一个 Docker 文件。我对 Docker 没有太多经验。

这是我写的Dockerfile

FROM python:3.7.5-slim-buster

# Installing Oracle instant client
WORKDIR    /opt/oracle
RUN        apt-get update && apt-get install -y libaio1 wget unzip \
        && wget 
https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite- 
linuxx64.zip \
        && unzip instantclient-basiclite-linuxx64.zip \
        && rm -f instantclient-basiclite-linuxx64.zip \
        && cd /opt/oracle/instantclient* \
        && rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci \
        && echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle- 
instantclient.conf \
        && ldconfig

WORKDIR    /app
COPY       . . 

EXPOSE     5000

CMD ["python", "/app/__init__.py"]

我使用以下命令:

  1. docker build -
  2. docker run -d -p 5000:5000 (docker image id)
  3. docker start -ai(docker 容器 ID) 我得到这个错误:python: can't open file '/app/__init__.py': [Errno 2] No such file or directory

我电脑上应用的文件夹结构如下: C:\Proiecte_python\Flask_Docker_App-Start\app 在应用程序中是即时 oracle 客户端,python 文件和 Dockerfile。

请有人帮助我,因为我认为 Dockerfile CMD 路径或类似的东西有问题。我尝试了许多变体,但没有一个工作

【问题讨论】:

  • 为什么用__init__.py启动python?
  • 这就是我从某人那里得到我的项目的方式。我的任务只是为它构建一个 Dockerfile
  • 我认为 dockerfile 的大部分内容都被省略了,COPY 部分。
  • 如果你改为运行docker build .,效果会更好吗?您是否验证过您检查的内容在容器内(例如,docker run --rm 0123456789ab ls -l /app)?

标签: python oracle docker dockerfile


【解决方案1】:

Dockerfile 的最后一行

CMD ["python", "/app/__init__.py"]

相当于执行

python /app/__init__.py

您得到的错误是文件 __init__.py 不存在。

线条

WORKDIR    /app
COPY       . . 

正在告诉您的容器将 CD 放入 /app 目录,然后将所有文件从您的 主机 机器(例如您的物理机器)复制到 /app 容器的目录。 (COPY . . 表示从主机的当前目录(例如,您运行 docker 命令的位置)复制到容器的当前目录 - /app)。

看来,作为接收 Dockerfile 的一部分,您还应该下载 __init.py__ 文件,然后 Dockerfile 会为您将其复制到您的容器中。

或者,您可能错过了说明中的步骤,您应该编写自己的 __init.py__ 文件进行测试。

无论哪种方式,您的解决方案都是找到 __init.py__ 文件并将其放入您当前的工作目录( C:\Proiecte_python\Flask_Docker_App-Start\app )确保从同一目录运行 docker builddocker run 命令,例如 -

cd C:\Proiecte_python\Flask_Docker_App-Start\app
docker build <....>
docker run <....>
docker start <....>

或者您的其他解决方案是返回说明并确保您已创建 python 文件并将其放在正确的位置。

作为一个非常基本的 Flask/Docker 教程,请参阅下面的链接

https://runnable.com/docker/python/dockerize-your-flask-application

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2020-11-28
    • 2018-03-13
    • 2020-03-19
    相关资源
    最近更新 更多