解决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日

相关文章

  • docker部署可执行jar包的思路与完整步骤

    Docker是一种轻量级容器化技术,它可以提供隔离的运行环境,使得应用程序可以方便地部署和管理。本文将介绍如何使用Docker部署可执行的Java jar包。 思路 准备Docker环境,包括Docker Engine和Docker Compose。 开发Java应用程序,并生成可执行的jar包。 创建Docker镜像,包含所需的操作系统和Java运行时环境…

    Docker 2023年5月15日
    00
  • 企业级GitLab在Docker部署使用

    一、部署gitlab 这里使用的是Centos8,安装Docker环境 ,这里不说了,参考:https://www.cnblogs.com/wei325/p/15139701.html gitlab有ce版和ee版,ce版为免费版本;ee版为企业版本,需要收费;这里用ce版。 1)拉取Gitlab镜像 docker pull gitlab/gitlab-ce…

    2023年4月9日
    00
  • Docker Toolbox安装

    公司最近搭建docker环境,其中会遇到一些问题,在这里记录一下。 先来了解一下docker 一、基本概念 1.Docker中基本概念镜像(Image)  提到镜像,有对操作系统有一定认知的都知道,镜像是一个压缩的ISO文件,里面包含操作系统运行所需要的运行环境以及库文件,配置文件等等。从认识上简单的来说,镜像就是面向对象中的类,相当于一个模板。从本质上来说…

    Docker 2023年4月11日
    00
  • 记一次Ubuntu19无法安装docker源

    按照各大网站以及个人习惯我会使用下面这种方法添加Docker源: root@ubuntu:~# sudo add-apt-repository “deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable”   然而使用上面这条命令…

    Docker 2023年4月13日
    00
  • Docker 自定义网络

    1、创建自定义网络 docker network create -d bridge –subnet 172.25.0.0/16 network_name 2、redis docker 添加到网络 docker run -it -v /myredis/etc/redis/redis.conf:/usr/etc/redis/redis.conf –netwo…

    Docker 2023年4月16日
    00
  • docker 突然不能被外网访问的解决方案

    当我们使用Docker容器部署服务时,有时会遇到无法被外网访问的问题。这种情况通常是由于网络、防火墙等原因造成的。在下面的攻略中,我将介绍两种解决该问题的方法。 方法1:检查宿主机的防火墙规则 首先,我们需要确认宿主机的防火墙规则是否允许外部访问Docker容器的端口。可以通过执行以下命令来检查: sudo iptables -S 该命令会列出当前的ipta…

    Docker 2023年5月15日
    00
  • Ubuntu Docker 的安装部署及简单应用

    Ubuntu Docker 的安装部署及简单应用攻略 1. 安装Docker 在Ubuntu中安装Docker有几种不同的方法。这里将介绍其中两种方法: 1.1 方法一:通过apt-get安装 在Ubuntu系统中,Docker可以通过apt-get命令安装。请按照以下步骤进行操作: 更新apt-get包管理器的本地包索引: sudo apt-get upd…

    Docker 2023年5月16日
    00
  • Docker 常见问题解决

    下面详细讲解“Docker 常见问题解决”的完整攻略。 1. 安装问题 1.1 安装 Docker 过程中出现 “Couldn’t connect to Docker daemon” 错误 这个错误通常是由于安装 Docker 时,Docker 服务没有启动导致的。可以通过以下操作来解决: 检查 Docker 是否已经安装并启动。可以通过命令 sudo sy…

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