使用docker直接运行不同版本nodejs命令

在低版本的操作系统上,安装和使用高版本的node以及相关工具可能会因为兼容性问题而无法使用,比如对Ubuntu 18.04来说,会因为glibc的版本问题而无法直接安装使用nodejs 18以上的版本。运行弄得是可能会遇到类似的报错

node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by node)

这种情况下,可以考虑直接使用把docker的镜像作为命令行使用。通过docker管理node版本好处是依赖完整,不会出现上面的依赖没有匹配的错误,比nvm等管理器会更加方便。代价的话,其实主要是硬盘空间和pull镜像时需要的时间,不过这些目前看对于node来说都不是什么大问题。

下面介绍一下方法。

首先是把镜像拉下来:

sudo docker pull node:latest
# 或者指定node的版本
# sudo docker pull node:<VERSION>

然后就可以通过这个镜像来运行各种node的命令了,比如运行yarn install

sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "npm" node:latest exec -c "yarn install"

这里对docker命令中一些参数的内容解释一下,

  • --rm 运行完命令后,删除docker的容器,这样不会留下关闭的容器,占用空间
  • -v $(pwd):/workdir --workdir /workdir 主要是为了把当前目录映射到容器里,也就是在容器的container里
  • --entrypoint "npm" node的docker镜像的默认是node命令本身,这里换成npm方便用npm exec来执行自定义的命令,比如yarn等。
  • exec "-c yarn install" 这里就是实际要执行的命令本身,因为在前面把entrypoint设置成了npm,所以这里命令是exec,后面引号里的"-c yarn install"都是exec的参数。

类似的我们也可以以不同的方式来写,或者完成其他的功能

# 显示版本
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "npm" node:latest exec -c "yarn -v"
# build
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "npm" node:latest exec -c "yarn build"
# 运行dev server, 暴露 3000 端口
sudo docker run -ti --rm -p 3000:3000 -v $(pwd):/workdir --workdir /workdir --entrypoint "npm" node:latest exec -c "yarn dev"
# 以yarn作为entrypoint
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "yarn" node:latest build
# 以/bin/bash作为entrypoint
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "/bin/bash" node:latest -c "yarn build"

最后,为了方便使用,可以写一个脚本把docker的相关参数都放进去,比如可以写一个docker-node.sh(可以考虑放到~/.local/bin/下面)

ARGS="$@"
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir --entrypoint "npm" node:20.13.1 exec -c "${ARGS}"

这样就可以省下docker的那一堆参数了来直接执行命令了

docker-node.sh yarn build

最后再说明一下,这里都是使用了node:latest作为镜像的版本,注意把这个替换为自己需要的node版本,比如node:20.13.1

相关推荐

  1. 使用docker直接运行不同版本nodejs命令

    2024-06-07 06:18:03       36 阅读
  2. 使用Docker运行不同版本Node.js

    2024-06-07 06:18:03       31 阅读
  3. Flask 不同版本项目的终端命令运行方式

    2024-06-07 06:18:03       26 阅读
  4. docker 运行pgsql 命令

    2024-06-07 06:18:03       43 阅读
  5. 使用工具 NVM来管理不同版本Node.js启动vue项目

    2024-06-07 06:18:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 06:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 06:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 06:18:03       82 阅读
  4. Python语言-面向对象

    2024-06-07 06:18:03       91 阅读

热门阅读

  1. Centos7安装Docker和DockerCompose

    2024-06-07 06:18:03       30 阅读
  2. PostgreSQL的视图pg_stat_database

    2024-06-07 06:18:03       30 阅读
  3. Open MV 人眼识别和瞳孔识别

    2024-06-07 06:18:03       33 阅读
  4. PostgreSQL的视图pg_locks

    2024-06-07 06:18:03       30 阅读
  5. python里装饰器的作用是什么

    2024-06-07 06:18:03       27 阅读
  6. mysql 索引和null值的关系

    2024-06-07 06:18:03       30 阅读
  7. 15、数据资产评估指导意见

    2024-06-07 06:18:03       28 阅读
  8. Leetcode.866 回文质数

    2024-06-07 06:18:03       31 阅读
  9. Python重试

    2024-06-07 06:18:03       26 阅读