在Docker中使用bash作为Docker命令的源代码在Docker中安装nvm



使用bash执行"docker exec";命令,我正在尝试在Docker容器中安装nvm。bash脚本中有以下命令:

更新:我已经添加了整个脚本。

#!/bin/bash
ubuntu_version="ubuntu:$1"
node_version=$2
container_name="ubuntu_container"
green=`tput setaf 2`
reset=`tput sgr0`
red=`tput setaf 1`
echo "${green}Pulling Ubuntu version: $ubuntu_version ${reset}"
docker pull $ubuntu_version
echo "${green}Running Ubuntu in background...${reset}"
# Stop and remove an existing docker container
docker stop $container_name
docker rm $container_name
docker run -d --name $container_name --rm $ubuntu_version sleep inf
echo "${green}Updating Ubuntu...${reset}"
docker exec $container_name apt update
docker exec $container_name apt upgrade
echo "${green}Installing curl${reset}"
docker exec $container_name apt install -y curl
echo "${green}Installing nvm: ${red}$node_version${reset}"
docker exec -it $container_name bash -c "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash"
docker exec $container_name bash -c ". ~/.bashrc; nvm"

这导致以下输出:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 15037  100 15037    0     0  54481      0 --:--:-- --:--:-- --:--:-- 54481
=> Downloading nvm as script to '/root/.nvm'
=> Appending nvm source string to /root/.bashrc
=> Appending bash_completion source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "nvm": executable file not found in $PATH: unknown

看起来nvm要么不在路径中,要么没有安装。我在这里错过了什么?

问题出在第三个docker exec上。

你有两个选项

  1. 运行:
docker exec -it test_container bash

在bash会话中,您可以运行nvm

  1. 运行:
docker exec test_container bash -c '. ~/.bashrc; nvm'

更新

关于1(,我认为(错误地(您正在手动运行docker exec

关于2(,在test.sh:中保存以下操作

#!/bin/bash

docker run -d --name test_container2 --rm node sleep inf
docker exec test_container2 apt install -y curl
docker exec -it test_container2 bash -c "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash"
docker exec test_container2 bash -c '. ~/.bashrc; nvm'

并运行bash test.sh

当我运行它时,我没有nvm: command not found

更新2

您的~/.bashrc版本包含对$PS1的测试,因此解决方法是将最后一行更改为:

docker exec $container_name bash -c "PS1=x; . ~/.bashrc; nvm"

相关内容

最新更新