我正在将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-compose到podman-compose在包中。
预期行为识别env别名。就像我在终端上直接运行命令一样。
复制步骤- 设置docker的别名
alias docker='podman'
alias docker-compose='podman-compose'
- 在包上添加一个脚本。
"scripts": {
"start": "docker-compose up --build",
...
- 运行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
我得到了这个工作:
- 添加
alias docker='podman'
到~/.zshenv
- 运行
npm config set script-shell zsh
见:https://github.com/npm/cli/issues/5153