【发布时间】:2021-10-20 17:02:47
【问题描述】:
我正在尝试复制我的整个主目录或至少将其提供给我的 docker build,但我收到以下错误:
error from sender: open .Trash: operation not permitted
这些是我为自己写的说明:
从
~/username运行 docker build(这使得一切从 可用的用户名)例如:/Users/miranda9然后运行:
docker build -t test:latest -f py_repo/pycoq_dockerfile/Dockerfile .
但是我得到了我上面提到的错误。有没有办法解决这个问题?
我的尝试基于this answer。
当前 docker 文件:
# FROM ubuntu:20.04
FROM ubuntu:18.04
# after this cmd RUN pwd should print /miranda9
WORKDIR /miranda9
# The COPY instruction copies new files or directories from <src> and adds them to the filesystem of the container at the path <dest>.
COPY . .
我也希望不必每次都重新制作图像。例如最好只运行我的容器,就好像它是一个命令一样。但我也很想看到需要重建图像的解决方案。
多年前我问过的相关问题:How to use a python library that is constantly changing in a docker image or new container?
尝试 2:没有 docker 文件但使用挂载卷的解决方案
我想完全避免使用 docker 文件,但我无法让它工作:
# docker run -v /Users/miranda9:/home/miranda9 -ti continuumio/miniconda3 bash
# docker run -v /Users/miranda9:/ -ti continuumio/miniconda3 bash
给出错误:
docker: Error response from daemon: invalid volume specification: '/host_mnt/Users/miranda9:/': invalid mount config for type "bind": invalid specification: destination can't be '/'.
【问题讨论】:
-
@LMC 将在明天发布。无法访问代码。但它非常简单。现在只是
FROM ubuntu:18.04和COPY . .作为初步尝试。明天更新。 -
通常您希望将构建上下文目录设置为尽可能接近应用程序的位置。在内部,Docker 创建了整个上下文目录的 tar 文件,并通过套接字将其发送给自己,所以像你的主目录这样的东西不是一个好的选择。你能
docker build py_repo/pycoq_dockerfile,没有-f选项吗? -
我猜
.Trash是一个具有特殊权限的特殊系统目录。所以你无权复制它。不知道为什么要完全复制整个用户目录,但这看起来不是一个好主意。如果可能的话,你也可以使用数组来复制精确的文件:COPY ["source_folder1", "source_file1", "./destination_folder"]。这将有助于避免复制系统文件和文件夹。 -
@rzlvmp 我有多个相互交互的不同项目的存储库。例如我有一个我的主文件夹使用的
ultimate-utils存储库和pycoq和我的主存储库main-repo,它们都处于任一开发模式(例如conda develop .或pip -e install .)。所以每当我运行我的代码时,我都希望 docker 容器拥有一切。我想最简单的破解方法是在我的家miranda/projects中有一个特殊的文件夹,在那里我有我所有的项目,这样.Trash和其他没有什么特别的东西可以让我工作......不知道还有什么是好主意... -
我也希望不必每次都重新制作图像。例如最好只是像命令一样运行我的容器。
标签: docker