首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker容器入口点挂载卷无此类文件错误

Docker容器入口点挂载卷无此类文件错误
EN

Stack Overflow用户
提问于 2020-08-22 01:04:25
回答 2查看 477关注 0票数 1

该图像将应用程序源代码存储在/app中。在不使用卷映射的情况下运行镜像上的容器时,它工作得很好。

如果我为/app:/opt/test设置了一个挂载点,那么我会得到以下错误:

代码语言:javascript
复制
python: can't open file 'run.py': [Errno 2] No such file or directory

我似乎想不出问题到底出在哪里。应用源码不能直接批量设置吗?我需要能够将/app目录挂载到主机上,并且仍然可以在/app中运行代码,或者其他一些替代方法。

Dockerfile:

代码语言:javascript
复制
FROM python:3.8-slim-buster

RUN mkdir /app

# Install SCIP requirements
RUN apt-get update && apt-get install -y wget libgfortran4 libblas3 liblapack3 libtbb-dev libgsl-dev libboost-all-dev build-essential g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libgmp3-dev libreadline-dev 
RUN wget https://www.scipopt.org/download/release/SCIPOptSuite-7.0.1-Linux.sh -O scip.sh && chmod +x scip.sh && ./scip.sh --skip-license && mv bin/scip /app/scip

VOLUME ["/app"]
WORKDIR /app

# Install pip requirements
ADD requirements.txt .
RUN python -m pip install -r requirements.txt

ADD . /app

# Switching to a non-root user, please refer to https://aka.ms/vscode-docker-python-user-rights
RUN useradd appuser && chown -R appuser /app
USER appuser

# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
ENTRYPOINT ["python", "run.py"]

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE 1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED 1

# Hypixel API key
ENV API_KEY key

# Bot Discord token
ENV DISCORD_TOKEN token
EN

回答 2

Stack Overflow用户

发布于 2020-08-22 02:10:52

如何解决:

只需从Dockerfile中删除即可

代码语言:javascript
复制
VOLUME ["/app"]

解释:

在复制之前,您在Dockerfile中创建了一个未命名的卷。因此,使用ADD . /app添加的文件不是保存在您的映像中,而是保存在您的卷中。

当您在Dockerfile文件(而不是docker create volume)中创建卷时,它是未命名的。这意味着docker为其指定一个任意名称(在以下示例中为69e64d18f338),并将数据保存在/var/lib/docker/volumes/69e64d18f338whatever/_data

因此,如果您在创建容器docker run时没有挂载这些数据,则无法在您的镜像中找到它。

一些好的实践。

一个不错的做法是在Dockerfile中使用卷来记录日志和易失性信息。

如果您想使用config,也不推荐使用Dockerfile中的卷。对于配置,最好使用命名卷。

对于用作entrypointcommand的二进制文件,您应该直接在docker镜像中设置它们,而不是在docker卷中。

票数 1
EN

Stack Overflow用户

发布于 2020-08-22 02:02:45

我想你的挂载点是颠倒的。

正确的语法是host_folder:container_folder,而不是相反。

尝试挂载/opt/test:/app

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63527164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档