我正在尝试部署地形的Terra合同:https://www.npmjs.com/package/@terra-money/Terrain
为了部署计数器合约,我需要做以下操作(我在windows 10上运行):
npx terrain deploy counter --signer validator
但是当我这样做时,我得到以下错误:
错误信息:docker: Error response from daemon: create $(pwd): "$(pwd)"包含无效字符作为本地卷名,只有"[a- za - z0 -9][a- za - z0 -9_.-]"是允许的。如果您打算传递一个主机目录,请使用绝对路径。参见"docker run——help"。
在网上搜索后,我发现问题是我在windows 10上运行,因此需要用%cd%替换$pwd。所以我进入地形库文件deploy .js,找到了负责这个错误的代码:
child_process_1.execSync(`docker run --rm -v "$(pwd)":/code
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry
cosmwasm/rust-optimizer-arm64:0.12.5`, { stdio: "inherit" });
现在,当我删除第二行--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target
并将$pwd替换为%cd%时,我得到以下内容:
child_process_1.execSync(`docker run --rm -v "%cd%":/code
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry
cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });
这似乎可以工作,因为它触发了一个构建和一个部署。然而,我去掉了第二行。如果我将第二行添加回来,并使用%cd%删除$pwd,我会得到以下内容:
child_process_1.execSync(`docker run --rm -v "%cd%":/code
--mount type=volume,source="%(basename "%cd%")_cache%",target=/code/target
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry
cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });
然而,这不起作用。我得到以下错误
docker:来自daemon的错误响应:create %(basename C:UsersuserDesktopAppsTerramy-dappcontractscounter)_cache%: "%(basename C:UsersuserDesktopAppsTerramy-dappcontractscounter)cache%"包含本地卷名的无效字符,只有"[a- za - z0 -9][a- za - z0 -9.-]"是允许的。如果您打算传递一个主机目录,请使用绝对路径。
这个错误看起来像我在$pwd中遇到的类似错误,但现在'basename'是问题所在。但是我不知道如何解决这个问题。谁能帮我一下?
我找到了解决方案。对于那些在同样的情况下,不知道发生了什么,以及如何解决它,我参考这个链接,我张贴的解决方案:
https://github.com/terra-money/terrain/issues/74
我想你的解决方案应该是这样的。您只需要变量$pwd
的值,并加上分隔符括号。
child_process_1.execSync(`docker run --rm -v ${pwd}:/code
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry
cosmwasm/rust-optimizer:0.12.5`, { stdio: "inherit" });