更新docker容器中的solidity版本



我使用docker安装安装了oyente,如链接中所述

https://github.com/enzymefinance/oyente使用以下命令。码头工人拉隆古恩&码头工人我可以分析旧的智能合约,但在新的合约上尝试时会出现编译错误。我需要更新solc的版本,但我做不到。

在容器上,当前版本为solc,solidity编译器命令行接口版本:0.4.21+commit.dfe193c.Linux.g++.

我读到更新它的最好方法是使用命令npm,所以我执行了以下命令,但我遇到了错误,因为我认为npm版本也不是新的。

docker exec -i container_name bash -c "npm install -g solc"

我会很感激的,因为我现在正努力解决这个问题好几个小时。提前感谢,Ferda

Docker的标准模型是映像是不可变的:它包含应用程序的固定版本及其依赖项,如果需要更新其中的任何一个,则需要构建一个新映像并启动一个新容器。

因此,这部分的第一部分看起来像任何其他Node包更新。在主机系统上没有节点的情况下安装节点。运行npm update --save solc以安装新版本并更新package.jsonpackage-lock.json文件。如果Docker没有参与进来,你会做同样的更新。

然后,您可以使用docker build重建Docker映像。这与最初构建映像时运行的命令相同。一旦创建了新映像,就可以停止、删除和重新创建容器。

# If you don't already have Node, get it
# brew install nodejs
# Update the dependency
npm update --save solc
npm run test
# Rebuild the image
docker build -t image_name .
# Recreate the container
docker stop container_name
docker rm container_name
docker run -d --name container_name image_name
npm run integration
git add package*.json
git commit -m 'update solc version to 0.8.14'

一些常见的Docker/Node设置试图将node_modules库树存储在匿名卷中。这不容易更新,并且隐藏了根据图像构建的node_modules树。如果您有这种设置(可能在Composevolumes:块中(,我建议删除任何隐藏图像内容的卷或装载。

请注意,此路径根本不使用docker exec。把这看作是在运行的进程中安装调试器:当你需要它时,它非常有用,但一旦进程或容器退出,你在那里做的任何事情都会丢失,它不应该是你正常操作工具包的一部分。

最新更新