
emscripten/emsdk此Dockerfile构建了一个独立版本的emsdk,使emscripten无需在主机系统上进行其他安装即可使用。该镜像发布于[***]
以下是使用该容器编译"hello-world"程序的示例:
bash# 创建helloworld.cpp cat << EOF > helloworld.cpp #include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; } EOF
bash# 使用docker镜像编译 docker run \ --rm \ -v $(pwd):/src \ -u $(id -u):$(id -g) \ emscripten/emsdk \ emcc helloworld.cpp -o helloworld.js # 在主机上执行 node helloworld.js
| 部分 | 描述 |
|---|---|
docker run | 标准的在容器中运行命令的指令 |
--rm | 执行后移除容器(优化) |
-v $(pwd):/src | 将主机当前目录挂载到容器中的/src路径 提示:这有助于排查问题,因为我们保留了与主机完全相同的路径。在这种情况下,现代编辑器(如Sublime、Atom、VS Code)允许我们Ctrl+点击有问题的文件 |
-u $(id -u):$(id -g) | 以与本地用户相同的UID和GID的非root用户身份运行容器。因此,由此产生的所有文件都可被非root用户访问 |
emscripten/emsdk | 获取此容器的最新标签 |
emcc helloworld.cpp -o helloworld.js | 在容器内执行emcc命令及后续参数,实际编译源代码 |
构建此镜像需要指定以下构建参数:
| 参数 | 描述 |
|---|---|
EMSCRIPTEN_VERSION | Emscripten的已发布版本之一。例如1.38.45可与 -upstream变体一起使用,如1.38.45-upstream最低支持版本为1.38.40 |
此步骤将在本地机器上按给定标签构建Dockerfile:
bash# 使用docker docker build \ --network host \ --build-arg=EMSCRIPTEN_VERSION=1.38.43-upstream \ --tag emscripten/emsdk:1.38.43-upstream \ .
bash# 使用预定义的make目标 make version=1.38.43-upstream build
如果直接使用docker build命令,指定的--tag应与Emscripten的发布版本匹配(可通过执行emsdk list查看非 legacy 版本列表)。
此步骤将本地镜像推送到默认Docker仓库。需要确保已通过docker cli登录(docker login)并有权限推送到该仓库。
bash# 使用docker docker push emscripten/emsdk:1.38.43-upstream
bash# 使用预定义的make目标 make version=1.38.43-upstream push
如果推送最新版本,还应将该版本标记为latest或latest-upstream并推送:
bash# 使用docker cli # 对于fastcomp变体(默认后端) docker tag emscripten/emsdk:1.38.43 emscripten/emsdk:latest docker push emscripten/emsdk:latest # 对于upstream变体 docker tag emscripten/emsdk:1.38.43-upstream emscripten/emsdk:latest-upstream docker push emscripten/emsdk:latest-upstream
bash# 使用预定义的make目标 make version=1.38.43-upstream alias=latest-upstream push
如果您的项目使用此镜像未提供的包,您可能需要:
创建自己的Dockerfile:
dockerfile# 指向任何您认为适合扩展的基础镜像 FROM emscripten/emsdk:1.38.25 # 安装项目所需的工具,例如ninja-build RUN apt update && apt install -y ninja-build
构建它:
shelldocker build -t extended_emscripten .
测试:
shelldocker run --rm extended_emscripten ninja --version # Python 2.7.16
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务