docker-git-bash-guide

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Docker on Windows Git Bash / MINGW - Path Conversion Guide

Windows系统Git Bash/MINGW环境下的Docker路径转换指南

This skill provides comprehensive guidance on handling Docker commands in Git Bash (MINGW) on Windows, with specific focus on volume mount path conversion issues and solutions.
本指南详细介绍了如何在Windows系统的Git Bash(MINGW)环境中处理Docker命令,重点解决卷挂载的路径转换问题及对应的解决方案。

The Path Conversion Problem

路径转换问题

When running Docker commands in Git Bash (MINGW) or MSYS2 on Windows, automatic path conversion can cause serious issues with volume mounts and other Docker commands.
在Windows系统的Git Bash(MINGW)或MSYS2中运行Docker命令时,自动路径转换可能会导致卷挂载和其他Docker命令出现严重问题。

What Triggers Automatic Conversion

触发自动转换的场景

MSYS/MINGW shells automatically convert arguments that look like Unix paths when calling Windows executables (like
docker.exe
):
Examples of problematic conversions:
bash
undefined
当调用Windows可执行文件(如
docker.exe
)时,MSYS/MINGW shell会自动转换类似Unix路径的参数:
转换异常示例:
bash
undefined

What you type:

你输入的命令:

docker run -v /c/Users/project:/app myimage
docker run -v /c/Users/project:/app myimage

What Docker receives (BROKEN):

Docker实际接收的命令(已损坏):

docker run -v C:\Program Files\Git\c\Users\project:/app myimage

**Triggers for path conversion:**
- Leading forward slash (`/`) in arguments
- Colon-separated path lists (`/foo:/bar`)
- Arguments with path components after `-` or `,`

**What's exempt from conversion:**
- Arguments containing `=` (variable assignments)
- Drive letters (`C:`)
- Arguments with `;` (already Windows format)
- Arguments starting with `//` (network paths/Windows switches)
docker run -v C:\Program Files\Git\c\Users\project:/app myimage

**触发路径转换的情况:**
- 参数以正斜杠(`/`)开头
- 冒号分隔的路径列表(`/foo:/bar`)
- 参数中`-`或`,`后带有路径组件

**不受转换影响的情况:**
- 包含`=`的参数(变量赋值)
- 驱动器号(`C:`)
- 包含`;`的参数(已为Windows格式)
- 以`//`开头的参数(网络路径/Windows开关)

Shell Detection for Docker Commands

Docker命令的Shell环境检测

Detecting Git Bash / MINGW Environment

检测Git Bash / MINGW环境

Use these environment variables to detect when path conversion issues may occur:
bash
undefined
使用以下环境变量检测可能出现路径转换问题的场景:
bash
undefined

Most reliable: Check for MSYSTEM

最可靠方式:检查MSYSTEM变量

if [ -n "$MSYSTEM" ]; then echo "Running in Git Bash/MINGW - path conversion needed" fi
if [ -n "$MSYSTEM" ]; then echo "运行在Git Bash/MINGW环境中 - 需要处理路径转换" fi

Alternative: Check uname

替代方式:检查uname输出

if [[ "$(uname -s)" == MINGW* ]]; then echo "Running in MINGW environment" fi
if [[ "$(uname -s)" == MINGW* ]]; then echo "运行在MINGW环境中" fi

Environment variable to check:

可检测的环境变量:

MSYSTEM values: MINGW64, MINGW32, MSYS

MSYSTEM的取值:MINGW64, MINGW32, MSYS

undefined
undefined

Solution 1: MSYS_NO_PATHCONV (Recommended for Git Bash)

解决方案1:MSYS_NO_PATHCONV(Git Bash推荐方案)

The most reliable solution for Git Bash on Windows.
这是Windows系统Git Bash环境下最可靠的解决方案。

Per-Command Usage

单命令使用

Prefix each Docker command with
MSYS_NO_PATHCONV=1
:
bash
undefined
在每个Docker命令前添加
MSYS_NO_PATHCONV=1
前缀:
bash
undefined

Volume mount with $(pwd)

使用$(pwd)进行卷挂载

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

Volume mount with absolute path

使用绝对路径进行卷挂载

MSYS_NO_PATHCONV=1 docker run -v /c/Users/project:/app myimage
MSYS_NO_PATHCONV=1 docker run -v /c/Users/project:/app myimage

Multiple volume mounts

多卷挂载

MSYS_NO_PATHCONV=1 docker run
-v $(pwd)/data:/data
-v $(pwd)/config:/etc/config
myimage
undefined
MSYS_NO_PATHCONV=1 docker run
-v $(pwd)/data:/data
-v $(pwd)/config:/etc/config
myimage
undefined

Shell-Level Configuration

Shell会话级配置

Disable path conversion for all Docker commands in your session:
bash
undefined
在当前会话中为所有Docker命令禁用路径转换:
bash
undefined

Add to ~/.bashrc or run in current shell

添加到~/.bashrc或在当前shell中运行

export MSYS_NO_PATHCONV=1
export MSYS_NO_PATHCONV=1

Now all Docker commands work normally

现在所有Docker命令可正常运行

docker run -v $(pwd):/app myimage
undefined
docker run -v $(pwd):/app myimage
undefined

Function Wrapper (Automatic per Docker Command)

函数包装器(自动处理所有Docker命令)

Create a function wrapper that automatically disables path conversion:
bash
undefined
创建函数包装器,自动为Docker命令禁用路径转换:
bash
undefined

Add to ~/.bashrc

添加到~/.bashrc

docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") }
docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") }

Or using MSYS2_ARG_CONV_EXCL for MSYS2

针对MSYS2环境使用MSYS2_ARG_CONV_EXCL

docker() { (export MSYS2_ARG_CONV_EXCL='*'; command docker.exe "$@") }
docker() { (export MSYS2_ARG_CONV_EXCL='*'; command docker.exe "$@") }

Make function available in subshells

使函数在子shell中可用

export -f docker
undefined
export -f docker
undefined

Solution 2: MSYS2_ARG_CONV_EXCL (MSYS2 Specific)

解决方案2:MSYS2_ARG_CONV_EXCL(MSYS2专属方案)

For MSYS2 environments (not standard Git Bash):
bash
undefined
适用于MSYS2环境(非标准Git Bash):
bash
undefined

Disable all argument conversion

禁用所有参数转换

export MSYS2_ARG_CONV_EXCL='*'
export MSYS2_ARG_CONV_EXCL='*'

Selective exclusion (specific patterns)

选择性排除(指定匹配模式)

export MSYS2_ARG_CONV_EXCL='--dir=;/test'
export MSYS2_ARG_CONV_EXCL='--dir=;/test'

Environment variable conversion exclusion

排除环境变量转换

export MSYS2_ENV_CONV_EXCL='*'
undefined
export MSYS2_ENV_CONV_EXCL='*'
undefined

Solution 3: Double Leading Slash

解决方案3:双正斜杠前缀

Prefix paths with an extra
/
to prevent conversion:
bash
undefined
为路径添加额外的
/
前缀以阻止转换:
bash
undefined

Single slash (converted - BROKEN)

单斜杠(会被转换 - 无效)

docker run -v /c/Users/project:/app myimage
docker run -v /c/Users/project:/app myimage

Double slash (not converted - WORKS)

双斜杠(不会被转换 - 有效)

docker run -v //c/Users/project:/app myimage
docker run -v //c/Users/project:/app myimage

Works in Git Bash on Windows

在Windows的Git Bash中有效

Treated as single slash on Linux (portable)

在Linux系统中会被视为单斜杠(可移植)


**Advantages:**
- No environment variables needed
- Works without wrapper functions
- Portable (extra slash ignored on Linux)

**Disadvantages:**
- Less readable
- Easy to forget
- Doesn't look like standard Docker syntax

**优势:**
- 无需设置环境变量
- 无需包装器函数
- 可移植(Linux会忽略多余的斜杠)

**劣势:**
- 可读性较差
- 容易遗忘
- 不符合标准Docker语法格式

Solution 4: Use $(pwd) with Proper Escaping

解决方案4:正确转义的$(pwd)用法

Always use lowercase
$(pwd)
(not
$PWD
) with proper syntax:
bash
undefined
始终使用小写的
$(pwd)
(而非
$PWD
)并遵循正确语法:
bash
undefined

CORRECT: Round brackets, lowercase pwd, no quotes

正确写法:圆括号、小写pwd、无引号

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

CORRECT: With subdirectories

正确写法:包含子目录

MSYS_NO_PATHCONV=1 docker run -v $(pwd)/src:/app/src myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/src:/app/src myimage

WRONG: Uppercase PWD variable (may not convert correctly)

错误写法:大写PWD变量(转换可能异常)

docker run -v $PWD:/app myimage
docker run -v $PWD:/app myimage

WRONG: Without MSYS_NO_PATHCONV (path gets mangled)

错误写法:未添加MSYS_NO_PATHCONV(路径会被篡改)

docker run -v $(pwd):/app myimage
undefined
docker run -v $(pwd):/app myimage
undefined

Docker Volume Mount Best Practices (Git Bash on Windows)

Git Bash(Windows)环境下Docker卷挂载最佳实践

For docker run Commands

docker run命令

bash
undefined
bash
undefined

Named volumes (no path conversion issue)

命名卷(无路径转换问题)

docker run -v my-named-volume:/data myimage
docker run -v my-named-volume:/data myimage

Bind mount with MSYS_NO_PATHCONV (RECOMMENDED)

绑定挂载+MSYS_NO_PATHCONV(推荐)

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

Bind mount with double slash (ALTERNATIVE)

绑定挂载+双斜杠(替代方案)

docker run -v //c/Users/project:/app myimage
docker run -v //c/Users/project:/app myimage

Read-only bind mount

只读绑定挂载

MSYS_NO_PATHCONV=1 docker run -v $(pwd)/config:/etc/config:ro myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/config:/etc/config:ro myimage

Multiple volumes

多卷挂载

MSYS_NO_PATHCONV=1 docker run
-v $(pwd)/src:/app/src
-v $(pwd)/data:/app/data
-v my-named-volume:/var/lib/data
myimage
undefined
MSYS_NO_PATHCONV=1 docker run
-v $(pwd)/src:/app/src
-v $(pwd)/data:/app/data
-v my-named-volume:/var/lib/data
myimage
undefined

For docker-compose.yml Files

docker-compose.yml文件

Docker Compose files use forward slashes and relative paths - these work correctly in Git Bash:
yaml
undefined
Docker Compose文件使用正斜杠和相对路径——在Git Bash中可直接正常工作
yaml
undefined

WORKS WITHOUT MODIFICATION in Git Bash

在Git Bash中无需修改即可使用

services: app: image: myimage volumes: # Relative paths (RECOMMENDED) - ./src:/app/src - ./data:/app/data
  # Named volumes (RECOMMENDED)
  - my-data:/var/lib/data

  # Windows absolute paths with forward slashes (WORKS)
  - C:/Users/project:/app

  # Unix-style paths (WORKS if referring to WSL/MINGW paths)
  - /c/Users/project:/app
volumes: my-data:

**Important:** When running `docker compose` commands:

```bash
services: app: image: myimage volumes: # 相对路径(推荐) - ./src:/app/src - ./data:/app/data
  # 命名卷(推荐)
  - my-data:/var/lib/data

  # 正斜杠格式的Windows绝对路径(有效)
  - C:/Users/project:/app

  # Unix风格路径(若指向WSL/MINGW路径则有效)
  - /c/Users/project:/app
volumes: my-data:

**重要提示:** 运行`docker compose`命令时:

```bash

No special handling needed for compose files

Compose文件无需特殊处理

docker compose up -d
docker compose up -d

But if you use command-line volume overrides:

但如果在命令行中覆盖卷配置:

MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/extra:/extra app
undefined
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/extra:/extra app
undefined

Complete Examples

完整示例

Example 1: Simple Application Development

示例1:简单应用开发

bash
undefined
bash
undefined

Set up environment once per session

单次会话中设置环境变量

export MSYS_NO_PATHCONV=1
export MSYS_NO_PATHCONV=1

Run with live code reload

启动带实时代码重载的容器

docker run -d
--name dev-app
-v $(pwd)/src:/app/src
-v $(pwd)/public:/app/public
-p 3000:3000
node:20-alpine
npm run dev
docker run -d
--name dev-app
-v $(pwd)/src:/app/src
-v $(pwd)/public:/app/public
-p 3000:3000
node:20-alpine
npm run dev

View logs

查看日志

docker logs -f dev-app
undefined
docker logs -f dev-app
undefined

Example 2: Database with Data Persistence

示例2:带数据持久化的数据库

bash
undefined
bash
undefined

Use named volume for database data (no path issues)

使用命名卷存储数据库数据(无路径问题)

docker run -d
--name postgres-db
-e POSTGRES_PASSWORD=mypassword
-v pgdata:/var/lib/postgresql/data
-p 5432:5432
postgres:16-alpine
docker run -d
--name postgres-db
-e POSTGRES_PASSWORD=mypassword
-v pgdata:/var/lib/postgresql/data
-p 5432:5432
postgres:16-alpine

Mount init scripts with MSYS_NO_PATHCONV

挂载初始化脚本+MSYS_NO_PATHCONV

MSYS_NO_PATHCONV=1 docker run -d
--name postgres-db
-e POSTGRES_PASSWORD=mypassword
-v pgdata:/var/lib/postgresql/data
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
-p 5432:5432
postgres:16-alpine
undefined
MSYS_NO_PATHCONV=1 docker run -d
--name postgres-db
-e POSTGRES_PASSWORD=mypassword
-v pgdata:/var/lib/postgresql/data
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
-p 5432:5432
postgres:16-alpine
undefined

Example 3: Full Stack with Docker Compose

示例3:Docker Compose全栈应用

bash
undefined
bash
undefined

Project structure:

项目结构:

/c/Users/project/

/c/Users/project/

├── docker-compose.yml

├── docker-compose.yml

├── backend/

├── backend/

├── frontend/

├── frontend/

└── data/

└── data/

docker-compose.yml (no special path handling needed)

docker-compose.yml(无需特殊路径处理)

cat > docker-compose.yml <<'EOF' services: backend: build: ./backend volumes: - ./backend/src:/app/src - ./data:/app/data ports: - "4000:4000"
frontend: build: ./frontend volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public ports: - "3000:3000" depends_on: - backend
database: image: postgres:16-alpine volumes: - db-data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: changeme
volumes: db-data: EOF
cat > docker-compose.yml <<'EOF' services: backend: build: ./backend volumes: - ./backend/src:/app/src - ./data:/app/data ports: - "4000:4000"
frontend: build: ./frontend volumes: - ./frontend/src:/app/src - ./frontend/public:/app/public ports: - "3000:3000" depends_on: - backend
database: image: postgres:16-alpine volumes: - db-data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: changeme
volumes: db-data: EOF

Start everything (works normally)

启动所有服务(正常运行)

docker compose up -d
docker compose up -d

Override with additional volume (needs MSYS_NO_PATHCONV)

附加额外卷进行覆盖(需要MSYS_NO_PATHCONV)

MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/scripts:/scripts backend bash
undefined
MSYS_NO_PATHCONV=1 docker compose run -v $(pwd)/scripts:/scripts backend bash
undefined

Troubleshooting Path Issues

路径问题排查

Problem: "No such file or directory" errors

问题:"No such file or directory"错误

Symptoms:
Error response from daemon: invalid mount config for type "bind":
bind source path does not exist: C:\Program Files\Git\c\Users\project
Diagnosis:
  • Path has been incorrectly converted by MINGW
  • Notice
    C:\Program Files\Git\
    prefix added
Solution:
bash
undefined
症状:
Error response from daemon: invalid mount config for type "bind":
bind source path does not exist: C:\Program Files\Git\c\Users\project
诊断:
  • MINGW错误转换了路径
  • 注意路径中添加了
    C:\Program Files\Git\
    前缀
解决方案:
bash
undefined

Add MSYS_NO_PATHCONV before command

在命令前添加MSYS_NO_PATHCONV

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
undefined
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
undefined

Problem: Volume appears empty in container

问题:容器中的卷为空

Symptoms:
  • Container starts successfully
  • But mounted directory is empty
  • Files exist on host
Diagnosis:
  • Path conversion mangled the source path
  • Docker created empty directory instead
Solution:
bash
undefined
症状:
  • 容器启动成功
  • 但挂载目录为空
  • 主机上存在对应文件
诊断:
  • 路径转换篡改了源路径
  • Docker创建了空目录而非挂载指定路径
解决方案:
bash
undefined

Use MSYS_NO_PATHCONV with $(pwd)

MSYS_NO_PATHCONV配合$(pwd)

MSYS_NO_PATHCONV=1 docker run -v $(pwd)/data:/data myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd)/data:/data myimage

Or use double slash

或使用双斜杠

docker run -v //c/Users/project/data:/data myimage
docker run -v //c/Users/project/data:/data myimage

Or use named volumes for persistent data

或使用命名卷存储持久化数据

docker run -v my-named-volume:/data myimage
undefined
docker run -v my-named-volume:/data myimage
undefined

Problem: Path with spaces fails

问题:含空格的路径执行失败

Symptoms:
Error: invalid reference format
Diagnosis:
  • Spaces in Windows paths not properly quoted
  • Path conversion + spaces = disaster
Solution:
bash
undefined
症状:
Error: invalid reference format
诊断:
  • Windows路径中的空格未正确引用
  • 路径转换+空格导致异常
解决方案:
bash
undefined

Use MSYS_NO_PATHCONV and quote $(pwd)

使用MSYS_NO_PATHCONV并引用$(pwd)

MSYS_NO_PATHCONV=1 docker run -v "$(pwd)":/app myimage
MSYS_NO_PATHCONV=1 docker run -v "$(pwd)":/app myimage

Or avoid spaces in project paths entirely (RECOMMENDED)

或完全避免项目路径中包含空格(推荐)

Move project from:

将项目从:

C:/Users/My Name/My Projects/app

C:/Users/My Name/My Projects/app

To:

移动到:

C:/Users/MyName/projects/app

C:/Users/MyName/projects/app

undefined
undefined

Problem: $PWD not working correctly

问题:$PWD无法正常工作

Symptoms:
  • Using
    $PWD
    variable instead of
    $(pwd)
  • Inconsistent behavior
Solution:
bash
undefined
症状:
  • 使用
    $PWD
    变量而非
    $(pwd)
  • 行为不一致
解决方案:
bash
undefined

WRONG: Using $PWD

错误写法:使用$PWD

docker run -v $PWD:/app myimage
docker run -v $PWD:/app myimage

CORRECT: Using $(pwd)

正确写法:使用$(pwd)

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

Explanation:

说明:

$(pwd) is a command that returns current directory

$(pwd)是返回当前目录的命令

$PWD is an environment variable that may not be properly formatted

$PWD是环境变量,格式可能不符合要求

undefined
undefined

Testing Your Configuration

配置测试

Create a test script to verify Docker volume mounts work correctly:
bash
#!/bin/bash
创建测试脚本验证Docker卷挂载是否正常工作:
bash
#!/bin/bash

test-docker-volume.sh

test-docker-volume.sh

echo "Testing Docker volume mounts in Git Bash..."
echo "在Git Bash中测试Docker卷挂载..."

Create test file

创建测试文件

mkdir -p test-mount echo "Hello from host" > test-mount/test.txt
mkdir -p test-mount echo "Hello from host" > test-mount/test.txt

Test 1: With MSYS_NO_PATHCONV

测试1:使用MSYS_NO_PATHCONV

echo "Test 1: With MSYS_NO_PATHCONV" MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
echo "测试1:使用MSYS_NO_PATHCONV" MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt

Test 2: With double slash

测试2:使用双斜杠

echo "Test 2: With double slash" docker run --rm -v //$(pwd)/test-mount:/data alpine cat /data/test.txt
echo "测试2:使用双斜杠" docker run --rm -v //$(pwd)/test-mount:/data alpine cat /data/test.txt

Test 3: Without workaround (should fail)

测试3:无解决方案(可能失败)

echo "Test 3: Without workaround (may fail)" docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt
echo "测试3:无解决方案(可能失败)" docker run --rm -v $(pwd)/test-mount:/data alpine cat /data/test.txt

Cleanup

清理

rm -rf test-mount
echo "Testing complete!"

Run it:
```bash
chmod +x test-docker-volume.sh
./test-docker-volume.sh
rm -rf test-mount
echo "测试完成!"

运行脚本:
```bash
chmod +x test-docker-volume.sh
./test-docker-volume.sh

Recommended Configuration

推荐配置

Add to your
~/.bashrc
:
bash
undefined
添加到你的
~/.bashrc
bash
undefined

Docker path conversion fix for Git Bash on Windows

Windows Git Bash环境下的Docker路径转换修复

export MSYS_NO_PATHCONV=1
export MSYS_NO_PATHCONV=1

Or use a wrapper function if you prefer per-command control

或使用包装器函数实现单命令控制

docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") } export -f docker
docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") } export -f docker

Alias for docker compose (if needed)

docker compose别名(若需要)

alias docker-compose='MSYS_NO_PATHCONV=1 docker compose'
undefined
alias docker-compose='MSYS_NO_PATHCONV=1 docker compose'
undefined

Platform Detection Script

平台检测脚本

Use this to automatically detect and configure Docker for Git Bash:
bash
undefined
使用以下脚本自动检测并配置Git Bash环境下的Docker:
bash
undefined

Add to ~/.bashrc

添加到~/.bashrc

Detect if running in Git Bash/MINGW on Windows

检测是否运行在Windows的Git Bash/MINGW环境

if [ -n "$MSYSTEM" ] || [[ "$(uname -s)" == MINGW* ]]; then

Running in Git Bash/MINGW

echo "Git Bash detected - enabling Docker path conversion fix" export MSYS_NO_PATHCONV=1

Optional: Create wrapper function for explicit control

docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") } export -f docker fi
undefined
if [ -n "$MSYSTEM" ] || [[ "$(uname -s)" == MINGW* ]]; then

运行在Git Bash/MINGW环境

echo "检测到Git Bash - 启用Docker路径转换修复" export MSYS_NO_PATHCONV=1

可选:创建包装器函数实现显式控制

docker() { (export MSYS_NO_PATHCONV=1; command docker.exe "$@") } export -f docker fi
undefined

Quick Reference

快速参考

Environment Variables

环境变量

VariablePurposeValues
MSYS_NO_PATHCONV
Disable all path conversion (Git Bash)
1
to disable
MSYS2_ARG_CONV_EXCL
Exclude specific arguments (MSYS2)
'*'
or patterns
MSYS2_ENV_CONV_EXCL
Exclude environment variables (MSYS2)
'*'
or patterns
MSYSTEM
MSYS subsystem indicator
MINGW64
,
MINGW32
,
MSYS
变量名用途取值
MSYS_NO_PATHCONV
禁用所有路径转换(Git Bash)
1
表示禁用
MSYS2_ARG_CONV_EXCL
排除指定参数(MSYS2)
'*'
或匹配模式
MSYS2_ENV_CONV_EXCL
排除环境变量转换(MSYS2)
'*'
或匹配模式
MSYSTEM
MSYS子系统标识
MINGW64
,
MINGW32
,
MSYS

Command Patterns

命令模式

bash
undefined
bash
undefined

RECOMMENDED: Export once per session

推荐:单次会话中设置一次

export MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
export MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

Per-command prefix

单命令前缀

MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage
MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app myimage

Double slash workaround

双斜杠替代方案

docker run -v //c/Users/project:/app myimage
docker run -v //c/Users/project:/app myimage

Named volumes (no path issues)

命名卷(无路径问题)

docker run -v my-data:/data myimage
docker run -v my-data:/data myimage

Docker Compose (relative paths work)

Docker Compose(相对路径可正常工作)

docker compose up -d
undefined
docker compose up -d
undefined

What Works Without Modification

无需修改即可正常工作的场景

These Docker commands work normally in Git Bash without special handling:
  • Named volumes:
    -v my-volume:/data
  • Network commands:
    docker network create
  • Image commands:
    docker build
    ,
    docker pull
  • Container commands without volumes:
    docker run myimage
  • Docker Compose with relative paths in YAML
以下Docker命令在Git Bash中无需特殊处理即可正常运行:
  • 命名卷:
    -v my-volume:/data
  • 网络命令:
    docker network create
  • 镜像命令:
    docker build
    ,
    docker pull
  • 无卷配置的容器命令:
    docker run myimage
  • YAML中使用相对路径的Docker Compose

What Needs MSYS_NO_PATHCONV

需要MSYS_NO_PATHCONV的场景

These commands require path conversion fixes:
  • Bind mounts with absolute paths:
    -v /c/Users/project:/app
  • Bind mounts with $(pwd):
    -v $(pwd):/app
  • Volume mounts on docker run command line
  • Any command with Unix-style absolute paths
以下命令需要路径转换修复:
  • 带绝对路径的绑定挂载:
    -v /c/Users/project:/app
  • 带$(pwd)的绑定挂载:
    -v $(pwd):/app
  • docker run命令行中的卷挂载
  • 任何包含Unix风格绝对路径的命令

Summary

总结

Best Practice for Git Bash on Windows:
  1. Add to ~/.bashrc:
    export MSYS_NO_PATHCONV=1
  2. Use relative paths in docker-compose.yml:
    ./src:/app/src
  3. Use named volumes for data:
    my-data:/var/lib/data
  4. Use $(pwd) with MSYS_NO_PATHCONV for bind mounts:
    MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app
This configuration ensures Docker commands work correctly in Git Bash on Windows without path conversion issues.
Windows系统Git Bash环境下的最佳实践:
  1. 添加到~/.bashrc:
    export MSYS_NO_PATHCONV=1
  2. 在docker-compose.yml中使用相对路径:
    ./src:/app/src
  3. 使用命名卷存储数据:
    my-data:/var/lib/data
  4. 绑定挂载时使用$(pwd)+MSYS_NO_PATHCONV
    MSYS_NO_PATHCONV=1 docker run -v $(pwd):/app
该配置可确保Docker命令在Windows的Git Bash环境中正常运行,避免路径转换问题。