NPM docker命令不被别名podman覆盖



我正在将Docker迁移到Podman,别名not在npm调用时工作

我添加了我的环境别名:

alias docker='podman'
alias docker-compose='podman-compose'

为了测试别名,我运行了docker-compose up --build,并使用podman-compose正常工作,如预期的那样。

在package.json中:

"scripts": {
"start": "docker-compose up --build",
...

当I运行npm run start,这是输出:

❯ npm run start
> project@1.0 start
> docker-compose up --build
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
我又做了一个测试,改变了docker-composepodman-compose在包中。

预期行为识别env别名。就像我在终端上直接运行命令一样。

复制步骤
  1. 设置docker的别名
alias docker='podman'
alias docker-compose='podman-compose'
  1. 在包上添加一个脚本。
"scripts": {
"start": "docker-compose up --build",
...
  1. 运行npm脚本
npm run start
环境

  • npm: 8.13.2
  • node . js: v14.19.3
  • OS名称:macOS 12.4 (Monterey)
  • 系统型号:Macbook Pro M1
  • npm配置:
❯ npm config ls
; node bin location = /Users/XPTO/.nvm/versions/node/v14.19.3/bin/node
; node version = v14.19.3
; npm local prefix = /Users/XPTO
; npm version = 8.13.2
; cwd = /Users/XPTO
; HOME = /Users/XPTO
; Run `npm config ls -l` to show all defaults.

我删除了docker,并添加到/usr/local/bin/docker:

#!/bin/bash
podman "$@"

和/usr/local/bin/docker-compose:

#!/bin/bash
podman-compose "$@"

可能npm运行在别名不存在的不同用户下。通过在启动脚本中添加id命令来检查它。另一种猜测是:在一个新的终端窗口中运行它来重新加载用户环境。

解决方案如下。

检查是否将脚本shell设置为终端。
检查只需使用命令npm config ls -l

...
script-shell = null
searchexclude = ""
searchlimit = 20
searchopts = ""
searchstaleness = 900
shell = "/bin/zsh"
...

如果你的" script-shell "值为null,使用npm config set script-shell zsh命令设置这个值到你的默认终端(zsh是macOS Catalina的默认终端),如果你不介意为每个项目改变你的shell,应该可以做到这一点。如果您想更具体,您可以将--location=project添加到该命令中,并且将在您的项目中创建.npmrc文件,并且该设置仅适用于该项目。

来源:https://github.com/npm/cli/issues/5153#issue-1302253170

我得到了这个工作:

  1. 添加alias docker='podman'~/.zshenv
  2. 运行npm config set script-shell zsh

见:https://github.com/npm/cli/issues/5153

最新更新