docker中使用$PWD: 提示 ‘:‘ was not followed by a valid variable name character. 解决方案

 原docker命令如下

docker run --name paddle_docker -it -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.3.1 /bin/bash

因为本质上是linux下的 运行代码

在windows是需要稍微做改动的

把$PWD:改成${pwd}:即可正常运行

改后docker命令如下

docker run --name paddle_docker -it -v ${pwd}:/paddle registry.baidubce.com/paddlepaddle/paddle:2.3.1 /bin/bash

参考的讨论贴 通过 Windows 控制台使用 Docker:包含无效字符 $PWD 作为本地卷名 - Using Docker via Windows console: includes invalid characters $PWD for a local volume name - 尼贝斯

### 解决 Docker 创建本地卷时因路径包含无效字符导致的错误 当创建 Docker 卷时,如果 `$PWD` 或其他变量中包含非法字符,则会引发 `invalid characters for local volume name` 错误。这是由于 Docker 对于卷名称有严格的命名规则,不允许某些特殊字符的存在。 在 Linux 和 macOS 中,当前工作目录通常通过环境变量 `$PWD` 表示。然而,在 Windows 上可能使用 `%CD%` 来表示相同的概念。这些路径可能会包含斜杠 `/`、反斜杠 `\` 或其他非法字符,从而违反 Docker 的命名约定[^1]。 #### 命名规则 Docker 要求卷名称仅由字母、数字以及有限的特殊字符(如 `_`, `-`, 和 `.`)组成。任何不符合此模式的内容都会触发上述错误消息。 #### 替代方案 为了规避这个问题,可以采用以下几种方法之一: 1. **手动指定合法的名字** 使用命令行参数显式定义一个有效的名字代替自动检测的工作区路径作为卷标识符。 ```bash docker run -v my_safe_volume_name:/container/path ... ``` 2. **哈希化路径字符串** 将完整的绝对文件系统位置转换成固定长度且安全的形式比如 MD5 或 SHA-256 散列值来绕过限制条件。 ```bash VOLUME_NAME=$(echo "$PWD" | sha256sum | cut -d ' ' -f 1) docker run -v ${VOLUME_NAME}:/container/path ... ``` 3. **替换非法字符** 自动预处理输入数据串并把所有不被允许使用的符号替换成下划线或其他许可范围内的替代品。 ```bash SAFE_PWD=${PWD//\//-} docker run -v $SAFE_PWD:/container/path ... ``` 以上三种方式都可以有效防止因为原始地址里存在冲突性的组成部分而产生的异常状况发生。 ```python import hashlib def generate_safe_docker_volume_name(path): hash_object = hashlib.sha256(str.encode(path)) hex_dig = hash_object.hexdigest() return f'docker-volume-{hex_dig[:8]}' safe_name = generate_safe_docker_volume_name("/some/illegal@path/") print(safe_name) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值