解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题

Docker 中使用相对路径挂载本地文件或目录时,可能会遇到无法挂载的问题。这通常是由于 Docker 容器并不知道上层目录中相对路径的存在而造成的。

以下是如何解决这个问题的完整攻略:

问题描述

在 Docker 中使用 docker run 命令时,使用相对路径挂载本地文件或目录时可能会提示文件不存在或权限不足等错误,如下:

docker run -v ./test:/app/test -it ubuntu:latest
docker: Error response from daemon: Bind mount failed: ./test:/app/test destination is not empty.

或者是

docker run -v $(pwd)/test:/app/test -it ubuntu:latest
docker: Error response from daemon: Mounts denied: The path /test is not shared from the host and is not known to Docker. You can configure shared paths from Docker -> Preferences... : Path /test

解决方案

使用绝对路径

使用绝对路径来挂载本地文件或目录,可以避免相对路径的问题。可以使用 pwd 命令来获取当前目录的绝对路径,如下:

docker run -v /home/user/test:/app/test -it ubuntu:latest

使用Dockerfile

可以使用 Dockerfile 定义容器的目录结构和依赖,从而避免使用相对路径挂载本地文件或目录的问题。

FROM ubuntu:latest

RUN mkdir /app
COPY test /app/test

构建 Docker 镜像并运行容器,如下:

docker build -t my_app .
docker run -it my_app

在 Dockerfile 中使用 COPY 命令将本地的 test 目录复制到容器的 /app/test 目录中。这样运行容器时,就不需要使用相对路径挂载本地文件或目录了。

需要注意:如果要在 Dockerfile 中使用 COPY 命令,请确保本地的 test 目录与 Dockerfile 在同一个目录下,否则会出现 file not found 错误。

示例

以下是两个示例:

示例 1

在本地先创建一个文件夹 my_app,并在其中创建一个文件 test.txt。然后使用绝对路径挂载本地文件夹。

mkdir /home/user/my_app
echo "Hello World!" > /home/user/my_app/test.txt

docker run -v /home/user/my_app:/app/my_app -it ubuntu:latest

在容器内,进入 /app/my_app 目录,可以看到本地的 my_app 文件夹和 test.txt 文件。

示例 2

在本地创建一个 Dockerfile。在 Dockerfile 中,将本地的 my_app 文件夹复制到容器中。

FROM ubuntu:latest

RUN mkdir /app
COPY my_app /app/my_app

my_app 文件夹中创建一个 test.txt 文件,然后执行以下命令构建 Docker 镜像并运行容器。

mkdir /home/user/my_app
echo "Hello World!" > /home/user/my_app/test.txt

cd /home/user/my_app
touch Dockerfile

# 编辑 Dockerfile,内容如上
docker build -t my_app .

docker run -it my_app

在容器内,进入 /app/my_app 目录,可以看到本地的 my_app 文件夹和 test.txt 文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • minio docker 安装

    查询镜像 docker search minio     拉取镜像 docker pull minio/minio     生成容器 docker run -p 9000:9000 –name minio -d –restart=always -e “MINIO_ACCESS_KEY=admin” -e “MINIO_SECRET_KEY=admin12…

    Docker 2023年4月11日
    00
  • Docker 容器和宿主机相互拷贝文件

    1、从容器里面拷文件到宿主机      答:在宿主机里面执行以下命令              docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径       示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, …

    Docker 2023年4月13日
    00
  • docker部署17版本

    Install on CentOS 7.1/7.2 & RHEL 7.0/7.1/7.2/7.3 (YUM-based systems) 1、Add the Docker public key for CS Docker Engine packages: sudo rpm –import “https://sks-keyservers.net/pk…

    Docker 2023年4月13日
    00
  • Docker镜像制作详解介绍

    Docker镜像制作详解介绍 当我们在使用Docker的时候,最常遇到的就是如何制作一个合适的镜像。这也是我们必须掌握的技能,因为只有找到一个合适的镜像,我们才能够在其基础上进行各种各样的应用。 Docker的镜像制作一般分为如下几个步骤: 编写一个Dockerfile文件,用来描述镜像中所使用的操作系统,镜像软件包,以及其他相关的组件和配置; 使用Dock…

    Docker 2023年5月16日
    00
  • Docker简单安装与应用入门教程

    下面我将为大家提供一份“Docker简单安装与应用入门教程”的完整攻略。 安装Docker Docker可以在多个平台上安装和运行,比如Windows、Mac和Linux等等。下面以安装Docker Desktop for Mac为例,简单介绍一下安装步骤: 首先,我们到Docker官网下载Docker Desktop。 下载完成后打开安装包,将Docker…

    Docker 2023年5月16日
    00
  • 在 树莓派(Raspberry PI) 中使用 Docker 运行 aspnetcore/dotnetcore 应用

    本文主要利用 Microsoft 提供的 Dockerfile 进行安装。 虽然Raspberry PI 3 CPU支持 armv8 指令集 ,但是在 docker info 还是识别为 “ armv7l”。所以安装镜像时一律选用 ARMv7 的镜像。 关于树莓派与 .NET Core 需要注意的地方 .NET Core 2.0 支持 Arm32,提供运行时…

    Docker 2023年4月12日
    00
  • 你知道,前端工程部署有哪些方式嘛?

    你知道,前端工程部署有哪些方式嘛? 本文原文地址; 此文章是回答知乎问题总结而来。 我将其分为四个阶段:手动部署、命令工具部署、docker镜像部署、平台化部署。这几个阶段,越往后越复杂,越往后越友好,毕竟平台化部署有备份还可回退,那是相当安全的。 手动部署 // 打包文件,生产dist目标文件 npm run build 将dist下的文件使用 _FTP文…

    Docker 2023年4月11日
    00
  • Docker Compose与Docker镜像仓库详解

    Docker Compose与Docker镜像仓库详解 Docker Compose是一个用于定义和运行多个Docker容器应用程序的工具,它可以通过一个单独的文件来定义整个应用程序的多个容器,包括容器之间的关系、网络连接等。 Docker镜像仓库是用于存储和管理Docker镜像的中央存储库,它被用于存储各种Docker镜像,供其它用户和项目进行使用。 Do…

    Docker 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部