gpt4 book ai didi

docker - 使用 docker exec 运行 nvm

转载 作者:行者123 更新时间:2023-12-04 01:55:40 27 4
gpt4 key购买 nike

我想用 docker exec 运行 nvm

就像是

docker run -d <image>
docker exec <container> nvm use v6.13.0 && npm install

但我有一个错误
OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"nvm\": executable file not found in $PATH": unknown

我知道我可以做类似的事情
docker exec <container> /bin/bash -c 'source "$NVM_DIR"/nvm.sh && nvm use v6.13.0'

但我不想。为什么 ?因为重点是创建一个可用于我所有项目的 docker 容器,使用不同版本的 python 和 node 并运行 nvm use <version> && npm install直接从 gitlab-ci 使用 .nvmrc文件到我的项目

我的 gitlab-cy.yml 运行一个 makefile,它基本上运行 nvm use 和 npm install
image: cracky5457/nvm-pyenv-yarn

stages:
- install
- test

variables:
GITLAB_CACHING: "true"

cache:
paths:
- pip-cache/
key: "python_2.7"

installing:
stage: install
script:
- make install
artifacts:
paths:
- venv/
- node_modules/
expire_in: 1 hour
tags:
- docker-runner

我不想推 /bin/bash -c进入我的 makefile,因为该项目将在本地依赖于 docker

这是我的 docker 镜像以及运行它的说明(你必须创建一个文件 base_dependencies.txt, node-versions.txt, python-versions.txt )或者你可以只是 docker pull cracky5457/nvm-pyenv-yarn
https://hub.docker.com/r/cracky5457/nvm-pyenv-yarn/
FROM phusion/baseimage:0.10.0

# Make sure bash is the standard shell
RUN rm /bin/sh && ln -sf /bin/bash /bin/sh

ENV ENV ~/.profile
ENV PYENV_ROOT /root/.pyenv
ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH

# Add yarn registry
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

# Install base system libraries.
ENV DEBIAN_FRONTEND=noninteractive
COPY base_dependencies.txt /base_dependencies.txt
RUN apt-get update && \
apt-get install -y $(cat /base_dependencies.txt)

# Install pyenv and default python version.
ENV PYTHONDONTWRITEBYTECODE true
RUN git clone https://github.com/yyuu/pyenv.git /root/.pyenv && \
cd /root/.pyenv && \
git checkout `git describe --abbrev=0 --tags` && \
eval "$(pyenv init -)"

# Install nvm and default node version.
ENV NVM_DIR /usr/local/nvm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash && \
echo 'source $NVM_DIR/nvm.sh' >> /etc/profile

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Install python and node versions
COPY python-versions.txt /python-versions.txt
RUN for version in $(cat python-versions.txt); do pyenv install $version; pyenv global $version; pip install virtualenv; done
COPY node-versions.txt /node-versions.txt
RUN for version in $(cat node-versions.txt); do source $NVM_DIR/nvm.sh; nvm install $version; done

# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]

最佳答案

我没有找到合适的方法。

您可以在 /usr/bin/nvm 中创建一个 bash 文件与 chmod +x /usr/bin/nvm

#!/bin/bash

export NVM_DIR="/usr/local/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

nvm "$@"

进而
docker exec <container> nvm use

但这很棘手,我无法在我的 exec 中添加其他指令,例如我不能 docker exec <container> nvm use && npm install同时。

但我终于在 gitlab-ci.yaml 中直接解决了我的问题使用
 $(NVM_DIR)/nvm.sh && nvm use && npm install

关于docker - 使用 docker exec 运行 nvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49040378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com