小贴士:Windows下docker挂载目录填坑记录

为便于代码调试和维护,一般在生成 Docker 容器时,会将宿主机的目录挂载到容器里。在macOS里使用终端运行 Shell 脚本,调试一切正常,但是在 Windows 里使用 Git Bash 终端运行同样的脚本时,发现挂载失败。

1 问题描述

运行的脚本:run.sh 内容为:

bash 复制代码
#!/bin/bash

docker run -itd \
  -v /path_to_宿主机路径:/path_to_容器路径 \
  --name your_container_name \
  your_image_name:your_image_version

此脚本在 macOS 下运行正常。但在 Windows 下挂载失败!

2 解决方案

网上搜索一番,发现在 Windows 下,对上面脚本的宿主机的路径使用规则有差异导致的,在 Windows 环境下,需要增加一个"斜杠"即"/",还是以上面的脚本为例,修改后的样子是

bash 复制代码
#!/bin/bash

docker run -itd \
  -v //path_to_宿主机路径:/path_to_容器路径 \
  --name your_container_name \
  your_image_name:your_image_version

如下图所示:

注意红框内为两个斜杠"//"

3 扩展应用

当在使用脚本自动生成挂载宿主机目录时,就必须自适应系统所运行的操作系统环境,根据操作系统确定是否添加多一个斜杠。

bash 复制代码
#!/bin/bash

OS=$(uname)

auto_slash=""
 
case "$OS" in
  Linux) # 在 Linux 系统上运行 
    ;;
  Darwin) # 在 macOS 系统上运行
    ;;
  CYGWIN*|MINGW32*|MSYS*|MINGW*) # 在 Windows 系统上运行
    auto_slash="/" # 将 $auto_slash
    ;;
  *)
    echo "Unknown OS: $OS" # 在其他系统上运行
    ;;
esac

此时,将挂载的代码修改成下面的样子就可以了

bash 复制代码
#!/bin/bash

OS=$(uname)

auto_slash=""
 
case "$OS" in
  Linux) # 在 Linux 系统上运行 
    ;;
  Darwin) # 在 macOS 系统上运行
    ;;
  CYGWIN*|MINGW32*|MSYS*|MINGW*) # 在 Windows 系统上运行
    auto_slash="/" # 将 $auto_slash
    ;;
  *)
    echo "Unknown OS: $OS" # 在其他系统上运行
    ;;
esac

docker run -itd \
  -v ${auto_slash}/path_to_宿主机路径:/path_to_容器路径 \
  --name your_container_name \
  your_image_name:your_image_version
相关推荐
comedate12 分钟前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
yanlaifan3 小时前
git版本管理工具中的回车换行转换逻辑
git
IT技术分享社区3 小时前
Windows桌面时钟推荐:始终置顶、无级缩放、支持全屏游戏显示时间
windows·微软技术·电脑技巧·桌面美化·电脑干货
tryCbest3 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器
开始学AI6 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器
做前端的娜娜子7 小时前
Docker 常用命令全梳理:从镜像拉取到容器编排
docker·容器·掘金·金石计划
公子小六7 小时前
基于.NET的Windows窗体编程之WinForms音频控件
windows·microsoft·c#·.net·音视频·winforms
m0_579146659 小时前
关于Docker Desktop导致C盘空间异常占用的排查与根治方案
运维·docker·容器
诸神缄默不语11 小时前
如何在Win11系统中找到是哪个程序占用了指定端口
windows
Shell运维手记11 小时前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash