কীভাবে ডকারে এনভিএম ইনস্টল করবেন?


109

আমি একটি নতুন ডকার ইমেজ তৈরির প্রক্রিয়াধীন এবং আমি এনভিএম ইনস্টল করার চেষ্টা করছি যাতে আমি নোডেজগুলি পরিচালনা করতে পারি।

কীভাবে এনভিএম ইনস্টল করবেন সে সম্পর্কে ডকগুলি পড়ার সাথে তারা উল্লেখ করে যে এনভিএম ব্যবহার শুরু করার জন্য আপনার .bashrc ফাইলটি উত্স করা উচিত।

আমি এটিকে একটি ডকফাইলে সেট আপ করার চেষ্টা করেছি, তবে এখনও পর্যন্ত ত্রুটি সহ বিল্ডিং ব্যর্থ হয়েছে:

"বাশ: এনভিএম: কমান্ড পাওয়া যায়নি"

আমার ডকফাইফিলের প্রাসঙ্গিক লাইনগুলি এখানে:

ADD files/nvm_install.sh /root/
RUN chmod a+x  /root/nvm_install.sh
RUN bash -c "/root/nvm_install.sh"
RUN bash -l -c "source /root/.bashrc"
RUN cd /root
RUN bash -l -c "nvm install 0.10.31"

এখানে নির্মাণের চেষ্টা থেকে প্রাপ্ত ফলাফল:

ডকার বিল্ড -t এনজিনেক্স_ডক।

Step 0 : FROM ubuntu
---> 826544226fdc
Step 1 : MAINTAINER dficociello
---> Using cache
---> da3bc340fbb3
Step 2 : RUN apt-get update
---> Using cache
---> 6b6b611feb4f
Step 3 : RUN apt-get install nginx curl -y
---> Using cache
---> 159eb0b16d23
Step 4 : RUN touch /root/.bashrc
---> Using cache
---> 5e9e8216191b
Step 5 : ADD files/nginx.conf /etc/nginx/
---> Using cache
---> c4a4a11296a2
Step 6 : ADD files/nvm_install.sh /root/
---> Using cache
---> b37cba2a18ca
Step 7 : RUN chmod a+x  /root/nvm_install.sh
---> Using cache
---> bb13e2a2893d
Step 8 : RUN bash -c "/root/nvm_install.sh"
---> Using cache
---> 149b49a8fc71
Step 9 : RUN bash -l -c "source /root/.bashrc"
---> Running in 75f353ed0d53
---> 0eae8eae7874
Removing intermediate container 75f353ed0d53
Step 10 : RUN cd /root
---> Running in feacbd998dd0
---> 284293ef46b0
Removing intermediate container feacbd998dd0
Step 11 : RUN bash -l -c "nvm install 0.10.31"
---> Running in 388514d11067
bash: nvm: command not found
2014/09/17 13:15:11 The command [/bin/sh -c bash -l -c "nvm install 0.10.31"] returned a non-zero         code: 127

আমি ডকারে বেশ নতুন তাই আমি ডকফিলিলেস লেখার জন্য কিছু মৌলিক বিষয় অনুপস্থিত হতে পারি, তবে এখনও পর্যন্ত আমি যে সমস্ত পাঠ করেছি তা আমাকে ভাল সমাধান দেখায় নি।


12
এটি ডুপ্লিকেট নয়, কারণ
ডকারের

4
যেহেতু আপনি কেবল নোডের একক সংস্করণ ইনস্টল করছেন তাই এনভিএম ইনস্টল করা অপ্রয়োজনীয় বলে মনে হচ্ছে। ডকার নোড রিপোজিটরি দ্বারা সরবরাহ করা ডকফায়াইলগুলি কীভাবে নোড ইনস্টল করতে হয় তার রেফারেন্স হিসাবে ব্যবহার করা যেতে পারে।
মিকওয়াত

উত্তর:


124

আপনি যখন RUN bash...প্রত্যেকবার পৃথক প্রক্রিয়াতে চলেছেন তখন পরিবেশে সেট করা কোনও কিছুই বজায় থাকে না। আমি কীভাবে ইনস্টল করব তা এখানে nvm:

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        build-essential \
        ca-certificates \
        curl \
        git \
        libssl-dev \
        wget \
    && rm -rf /var/lib/apt/lists/*

ENV NVM_DIR /usr/local/nvm # or ~/.nvm , depending
ENV NODE_VERSION 0.10.33

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/v$NODE_VERSION/bin:$PATH

এটির দু'বার গতি বাড়ানোর জন্য কেবলমাত্র এতে পরিবর্তন v0.20.0করুনv0.24.1
ইটনিকোলে

8
এনভিএম 0.31.0এবং নোডের v4.2.3সাহায্যে পথটি হল/usr/local/nvm/versions/node/v4.2.3/bin
সিডব্লুএসু

4
@ থিয়াগোহ এটি প্রশ্ন করে না যে এনভিএম-এর প্রশ্নকর্তার ইনস্টল কাজ করে না এবং কাজের উত্তরগুলি কাজ করে। এটি পৃথক প্রক্রিয়াগুলিতে চালিত শেলগুলির সাথে কিছুই করার নেই। কারণ প্রশ্নটি bash.rc উত্স থেকে nvm.sh ফাইলটি লোড করার চেষ্টা করে যা এনভিএম কমান্ডটিকে ব্যাশে লোড করে, তবে bash.rc আক্রমণের বাইরে চলে গেলে তা প্রারম্ভিকভাবে প্রস্থান করে, সুতরাং এনভিএম কমান্ডটি লোড হয় না। সমস্ত সফল উত্তর সোনা nvm.sh সরাসরি এটি bash.rc. এর মাধ্যমে না করে সরাসরি উত্স করে source এটি এই কাজটি করার মূল চাবিকাঠি।
tobuslieven

4
বাশের সাথে শ প্রতিস্থাপনের পরিবর্তে . $NVM_DIR/nvm.shউত্স বাইনারি এড়িয়ে আপনি কেবল পারেন ।
রাজ্জান গ্রিগোর

4
এই ঘনিষ্ঠ, কিন্তু পাথ একটু সমন্বয় প্রয়োজন, হওয়া উচিত: ENV NODE_PATH $ NVM_DIR / সংস্করণ / নোড / V $ NODE_VERSION / lib / অনুপস্থিত node_modules ENV পাথ $ NVM_DIR / সংস্করণ / নোড / V $ NODE_VERSION / বিন: $ পাথ
Lunulata

33

উবুন্টু (শেষ সংস্করণ) এ এনভিএম দিয়ে নোড.জেএস ইনস্টল করার জন্য যে উপায়গুলি সন্ধান করছেন তাদের প্রত্যেককে সহায়তা করতে, আমি নীচে ডকফেরাইল তৈরি করেছি। আমি ডকার, উবুন্টু, নোড.জেএস এর সর্বশেষ সংস্করণটি ব্যবহার করছি এবং এনভিএম সঠিকভাবে কাজ করছে ((প্যাথ ঠিক করা হয়েছিল)। আমি এটি উত্পাদন পরিবেশে ব্যবহার করছি।

$ docker info \
Server Version: 1.9.1
Kernel Version: 4.1.13-boot2docker
Operating System: Boot2Docker 1.9.1 (TCL 6.4.1); master : cef800b - Fri Nov 20 19:33:59 UTC 2015

Node.js Version: stable 4.2.4 LTS
Ubuntu Version: 14.04.3


ডকফেরাইল:

FROM ubuntu:14.04.3

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# make sure apt is up to date
RUN apt-get update --fix-missing
RUN apt-get install -y curl
RUN apt-get install -y build-essential libssl-dev

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 4.2.4

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN mkdir /usr/app
RUN mkdir /usr/app/log

WORKDIR /usr/app

# log dir
VOLUME /usr/app/log

# Bundle app source
COPY . /usr/app
# Install app dependencies
RUN npm install

EXPOSE  3000
CMD ["node", "server.js"]

4
NODE_PATH ENV NODE_PATH $ NVM_DIR / সংস্করণ / নোড / V $ NODE_VERSION / lib / অনুপস্থিত node_modules করা উচিত হবে না
সংবেদী

হ্যালো @ সেন্টেন্ট! আমি এই ডকারটি একটি উত্পাদন পরিবেশে চালাচ্ছি (উবুন্টু) এবং স্থানীয় দেব (ওএসএক্স), উভয়ই ত্রুটি ছাড়াই সঠিকভাবে কাজ করছে। আপনি কি পুরানো এনভিএম চালাচ্ছেন?
ড্যানিলোডেভোপার

আমার কি বিল্ড-অ্যাসোসিয়েশন এবং libssl-dev ইনস্টল করার জন্য SUDO ব্যবহার করা উচিত তার কোনও কারণ আছে? আমি মোটেও পাকা ডিভোপস নই।
a.barbieri

4
চাবিকাঠিsource $NVM_DIR/nvm.sh && nvm install $NODE_VERSION
ভ্লাদিমির Kornea

24

গৃহীত উত্তরের পর থেকে এনভিএম পাথগুলি পরিবর্তিত হয়েছে, সুতরাং আপনি যদি আরও একটি আপ-টু-ডেট এনভিএম সংস্করণ ব্যবহার করতে চান তবে আপনাকে কয়েকটি পরিবর্তন করতে হবে। এছাড়াও, এটিকে কাজ করতে পুনরায় তৈরি করা প্রয়োজন হয় না sh:

ENV NVM_DIR /usr/local/nvm
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
ENV NODE_VERSION v7.9.0
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"

ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH

আমি - এর জন্য আপনার --delete-prefixবিকল্পটির প্রয়োজন হবে কিনা তা নিশ্চিত নয় nvm useতবে এটি আমার বেস চিত্রটি সম্পর্কে অদ্ভুত কিছু হতে পারে।


4
জীবন রক্ষাকারী! যদি আমি 3 ঘন্টা আগে আপনার প্রতিক্রিয়াটি দেখতে পেতাম।
অ্যাড্রিয়ান মেরিনিকা

আমার জন্য কাজ করেছেন, বেস ইমেজ পিএইচপি: 7.1.1
টবি মেলোর

20

প্রতিটি RUNডকফাইফিলের প্রত্যেককে একটি ভিন্ন পাত্রে চালিত করা হয়। সুতরাং আপনি যদি কোনও ধারকটিতে কোনও ফাইল উত্স করে থাকেন তবে এর সামগ্রীটি পরেরটিতে পাওয়া যাবে না।

এ কারণেই আপনি যখন কোনও অ্যাপ্লিকেশন ইনস্টল করেন এবং আপনাকে কয়েকটি ধাপ করতে হবে, আপনাকে অবশ্যই এটি একই পাত্রে করা উচিত।

আপনার উদাহরণ সহ:

ADD files/nvm_install.sh /root/
RUN chmod a+x /root/nvm_install.sh && \
  /root/nvm_install.sh && \
  source /root/.bashrc && \
  cd /root && \
  nvm install 0.10.31

ঠিক আছে, ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ। সুতরাং আমি আমার স্ক্রিপ্টটি দেখতে এটির মতো পরিবর্তন করেছি: bu উবুন্টু মাইনটাইনার ডিফিকোসিলো থেকে ফাইলগুলি / এনভিএম_ইনস্টল.শ / রুট / # এনভিএম রুন ইনস্টল করুন ["/ বিন / বাশ", "-সি", "আরএম-এফ / ইত্যাদি / nginx / nginx.conf && টাচ করুন / রুট /.বাশার্ক && অ্যাপ্লিকেশন আপডেট করুন & অ্যাপ্লিকেশন-এ ইনস্টল করুন এনগিনেক্স কার্ল -y && chmod এ + x /root/nvm_install.sh & উত্স /root/.bashrc && / root / nvm_install। sh &&vv ইনস্টল করুন 0.10.31 "] এডিডি ফাইল / এনগিনএক্স.কনফ / ইত্যাদি / এনগিনেক্স / এক্সপোজ 22` আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: `/ বিন / ব্যাশ: /root/nvm_install.sh: / বিন / ব্যাশ: খারাপ দোভাষী: পাঠ্য ফাইল ব্যস্ত `
ডেভিড ফিকোসিয়েলো

এই ত্রুটিটি অবশ্যই আপনার লাইনের সাথে যুক্ত থাকতে হবে RUN ["/bin/bash", ...]। এটি অবশ্যই ঘিরে [...]থাকবে না এবং আপনাকে দোভাষীটি নির্দিষ্ট করার দরকার নেই /bin/bash -c
কুহেস

19

আপডেট 20/02/2020 : আপনি যদি কোনও debianবেস ইমেজ ব্যবহার করেন তবে এই সমাধানটি কাজ করে । আপনি ব্যবহার করেন, তাহলে ubuntuদেখতে এই উত্তর

nvmআমি খুঁজে পেয়েছি এটি ইনস্টল করার সর্বোত্তম উপায় এখানে :

SHELL ["/bin/bash", "--login", "-c"]

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
RUN nvm install 10.15.3

ব্যাখ্যা

  • প্রথম লাইনটি ডকফাইফিলের ডিফল্ট শেলটিকে ব্যাশ লগইন শেলটিতে সেট করে । নোট: এর অর্থ এই যে প্রতি পরবর্তী RUN, CMDএবং ENTRYPOINTবর্তমান ব্যবহারকারীর (সাধারণত মূল) অধীনে পরিচালিত হবে, এবং সোর্স ~ / .bashrc ফাইল তাহলে রান শেল ফর্ম

  • দ্বিতীয় লাইনটি nvmব্যাশ সহ ইনস্টল করে। স্ক্রিপ্টটি যখন ব্যাশ দিয়ে চালানো হয় তখন তা ~ / .bashrc ফাইলের সাথে যুক্ত হয়।

  • তৃতীয় লাইনটি নোডেজের একটি নির্দিষ্ট সংস্করণ ইনস্টল করে এবং এটি ব্যবহার করে। nvm, npm, এবং nodeকমান্ড পাওয়া যায় কারণ তারা ব্যাশ লগ-ইন শেল (লাইন 1 দেখুন) মাধ্যমে পরিচালিত হয়ে থাকে।


4
আকর্ষণীয় যে এটি আপনার পক্ষে কাজ করছিল। আমি অনুরূপ কিছু চেষ্টা করেছিলাম এবং বিল্ডগুলির সময় সবকিছু ঠিকঠাক দেখতে পেলাম, তবে ফলাফলের চিত্রটি চালাতে গিয়ে এনপিএম পাওয়া যায়নি। সুস্পষ্টভাবে সেটিংস NVM_DIR(অন্যান্য উত্তরগুলির মধ্যে বেশ কয়েকটি হিসাবে দেখানো হয়েছে) এটি আমার জন্য স্থির করে।
এসমাইল

4
@ ইমেইলটি অদ্ভুত কারণ প্রথম RUNকমান্ডটি সেট NVM_DIRকরে ~/.bashrc
ডমিনিক রায়-স্টাং

4
@ ডোমিনিকরোয়-স্ট্যাং, বৈধ পয়েন্ট। আমি যে চিত্রটি ব্যবহারের সাথে কাজ করছি shএবং তাই এটি উপেক্ষা করে .bashrc। এছাড়াও, আপনি কি নিশ্চিত .bashrcযে RUNআদেশগুলি কার্যকর করার আগে সত্যিই উত্সাহিত হয়েছিল ? অফিসিয়াল bashচিত্রটির সাথে আমার সংক্ষিপ্ত পরীক্ষায় , মনে হয়েছিল এটি এমনটি ছিল না।
এসমাইল

4
@ ইমেইল এটাই প্রথম লাইন ( SHELLনির্দেশ) সম্বোধন করে। এটি ক্রমাগত RUN কমান্ডগুলি লগইন শেল ব্যবহার করে যা .bashrcফাইলটি উত্স করে । দ্রষ্টব্য: কমান্ডগুলি কেবল শেল মোডে চালিত হলে এটি কাজ করে eg RUN nvm --version। কমান্ডগুলি এক্সিকিউটি মোডে চালিত হয় তবে এটি কাজ করবে না। RUN ["nvm", "--version"]। আশা করি এটিকে আরও সুস্পষ্ট করার জন্য আমি শেল ফর্মের জন্য আমার সরবরাহ করা লিঙ্কটি আপডেট করেছি।
ডমিনিক রায়-স্টাং

17

এটি শীর্ষ উত্তরের উপর ভিত্তি করে এবং 2018 সালে কাজ করে:

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        build-essential \
        ca-certificates \
        curl \
        git \
        libssl-dev \
        wget

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 8.11.3

WORKDIR $NVM_DIR

RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

নোট করুন যে nvmকোনও ব্যাশ কমান্ড নয়, এটি একটি উপনাম। যদি আপনি নির্ভর করেন তবে এটি আপনাকে স্ক্রু করতে পারে $PATH


10

@ কুহেস উত্তরের পরামর্শের ভিত্তিতে আমি সোর্স কমান্ডটি আমার ডকফাইফিলের সাথে নীচের সাথে প্রতিস্থাপন করেছি

RUN cat ~/.nvm/nvm.sh >> installnode.sh
RUN echo "nvm install 0.10.35" >> installnode.sh
RUN sh installnode.sh

10

এটি করার সবচেয়ে পরিষ্কার উপায়টি বের করতে আমাকে এক বা দুই ঘন্টা সময় নিয়েছে। --login .bashrc কার্যকর করছে বলে মনে হচ্ছে না সুতরাং এটি ইন্টারেক্টিভ মোডে চালু করার জন্য আপনাকে সরবরাহ সরবরাহ করতে হবে। এর ফলে ডকার আপনাকে কিছুটা চিৎকার করতে পারে তাই আমি কেবলমাত্র এইভাবে ইনস্টলেশনটির জন্য চালু করি, তারপরে আমার স্ট্যান্ডার্ড শেলটিতে পুনরায় সেট করুন।

# Installing Node
SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
RUN source /root/.bashrc && nvm install 12.14.1
SHELL ["/bin/bash", "--login", "-c"]

আপনার উত্তর আমাকে বুঝতে পেরেছিল যে ubuntuবেস বেস হিসাবে ব্যবহার করে আমার কাজ করে না (তবে আপনার কাজটি করে)। আমি debianভিত্তিক চিত্র ব্যবহার করছিলাম । আমি নিশ্চিত না যে কী কারণে দুজনের মধ্যে বৈষম্য সৃষ্টি হচ্ছে। কোন ধারনা?
ডোমিনিক রায়-স্টাং

আমি বেস ইমেজ হিসাবে উবুন্টু 19:10 ব্যবহার করছি। আমি সমস্ত প্রাসঙ্গিক ডকার নির্দেশাবলী পোস্ট করব যাতে আমার জন্য কী কাজ করে সে সম্পর্কে আপনার ধারণা থাকতে পারে। আমি যে নির্দেশাবলী রেখে গেছি তা প্রাসঙ্গিক নয় বা আমি সরবরাহ করতে পারি না। আমি একটি মন্তব্য দিয়ে তাদের উপস্থাপন করব। চরিত্রের সীমাটি খুব কম সেট হওয়ায় আমি এটি পরবর্তী মন্তব্যে পোস্ট করব
ব্যবহারকারী 2896438

8

এখানে আমার কাজের সংস্করণ

FROM ubuntu:14.04

# Declare constants
ENV NVM_VERSION v0.29.0
ENV NODE_VERSION v5.0.0

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install pre-reqs
RUN apt-get update
RUN apt-get -y install curl build-essential

# Install NVM
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash

# Install NODE
RUN source ~/.nvm/nvm.sh; \
    nvm install $NODE_VERSION; \
    nvm use --delete-prefix $NODE_VERSION;

@ আব্দুলজিবালি এবং @ শামিসিস উত্তরের সাহায্য নিয়েছি।


~/.nvm/nvm.shফাইলটি উত্সাহিত করা আমার প্রয়োজনীয় চাবি ছিল।
স্টিফেন

উবুন্টু 16.04.2 ধারক নিয়ে এটিই আমার জন্য একমাত্র সমাধান ছিল।
drohm

7

আমি যে আমি সর্বাঙ্গে অনুসন্ধান একটি কাজ উদাহরণস্বরূপ পেতে সঙ্গে শুরু হওয়া উচিত nvmভিতরে dockerএবং আমি দেখতে পেলাম না। এমনকি এই থ্রেডের উত্তরগুলিও কার্যকর হয়নি।

সুতরাং, আমি বেশ কিছুটা সময় ব্যয় করেছি এবং একটি কাজ করে যা কাজ করে:

# install dependencies
RUN apt-get update && apt-get install -y \
      curl \
      npm \
      nodejs \
      git;

# compatibility fix for node on ubuntu
RUN ln -s /usr/bin/nodejs /usr/bin/node;

# install nvm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | sh;

# invoke nvm to install node
RUN cp -f ~/.nvm/nvm.sh ~/.nvm/nvm-tmp.sh; \
    echo "nvm install 0.12.2; nvm alias default 0.12.2" >> ~/.nvm/nvm-tmp.sh; \
    sh ~/.nvm/nvm-tmp.sh; \
    rm ~/.nvm/nvm-tmp.sh;

লক্ষ্য করুন কীভাবে আমি ইনস্টল করা আছে nodejsমাধ্যমে apt-getহিসাবে ভাল। আমি দেখতে পেয়েছি যে এটি না করা থাকলে কিছু প্যাকেজ ডকারের ভিতরে ইনস্টল হয় না।


হ্যাঁ - মানুষ - প্রায় 100 টি সমাধান সম্পর্কে চেষ্টা করেছিলেন এবং কেবল আপনার কাজগুলি - 10x!
srfrnk

~ / .Nvm / nvm-tmp.sh ব্যবহার করা সঠিক, সুতরাং নোড সংস্করণগুলি ~ / .nvm ডিরেক্টরিতে সঠিকভাবে ইনস্টল করা হয়েছে
গাইডোম্যান

7

প্রশ্নে এনভিএম কমান্ড পাওয়ার প্রয়াসের মধ্যে একটি মূল পার্থক্য:

RUN bash -l -c "source /root/.bashrc"

যা কার্যকর হয় না এবং গৃহীত উত্তরে একই কাজ করার চেষ্টা করে:

source $NVM_DIR/nvm.sh

এটি কি দ্বিতীয় সংস্করণটি সরাসরি এনভিএম.এস স্ক্রিপ্ট উত্স করে, যেখানে মূলটি .bashrc ফাইলের মাধ্যমে এটি করার চেষ্টা করে।

.Bashrc ফাইলটির শুরুতে একটি লাইন থাকে যা এটি একটি ইন্টারেক্টিভ শেলটিতে চালিত হলে প্রস্থান করে:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
    *) return;;
esac

সুতরাং এটি কখনই বিট যায় না যেখানে এটিতে এনভিএম.শার স্রোস থাকে যা আসলে আপনার শেলটিতে এনভিএম কমান্ড রাখে।

ডকার যদি এই স্টাফটি একটি অ ইন্টারেক্টিভ শেলটিতে চালাচ্ছে তবে আমি অবাক হব না। এটি সুস্পষ্টভাবে চিহ্নিত করা হয়নি, তাই আমি ভেবেছিলাম যে আমি যখন ভ্যাবাগ্রহীদের সাথে একই রকম কিছু করছিলাম তখন আমাকে তা ধরা পড়েছিল।


সমস্যার উত্স সন্ধানের জন্য ধন্যবাদ। আমি বেস উবুন্টু 19.10 চিত্রের বাইরে /etc/skel/.bashrc ফাইলটি অনুলিপি করেছি এবং তারপরে উপরের আপত্তিজনক লাইনগুলি সম্পর্কে মন্তব্য করেছি। তারপরে আমার ডকফাইলে, আমি একটি "সংশোধিত" /etc/skel/.bashrc / / ইত্যাদি / স্কেলের অনুলিপি করতে COPY কমান্ডটি ব্যবহার করেছিলাম এবং তারপরে কেবল তাদের শেল হিসাবে / বিন / বাশ ব্যবহারকারীদের তৈরি করতে আরআরএন ব্যবহার করি। তারপরে RUN ["/ bin / bash", "-c", "-l", আপনার_কম্যান্ড [এস] _হিরে] এর পরে কলগুলি ভাল কাজ করেছে।
স্টিফান ডোলিভ

4

এগুলির কোনওটিই আমার পক্ষে কাজ করেনি, আমার python3-onbuildধারকটির জন্য আমাকে এনভিএম ইনস্টলেশনতে প্রতীকী লিঙ্কগুলি জোর করে তৈরি করতে হয়েছিল।

# Install npm and nodejs
RUN apt-get install -y build-essential libssl-dev

RUN mkdir /root/.nvm
ENV NVM_DIR /root/.nvm
ENV NODE_VERSION 8.9.4

RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.9/install.sh | bash
RUN chmod +x $HOME/.nvm/nvm.sh
RUN . $HOME/.nvm/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && nvm use default && npm install -g npm

RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/node /usr/bin/nodejs
RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/node /usr/bin/node
RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/npm /usr/bin/npm

রাজি। ডকার পাত্রে ইনস্টল করার সময় (দেবিয়ান জিএনইউ / লিনাক্স 9 (প্রসারিত)), এনভিএম $HOME/.nvmআমার জন্যও শেষ হয় ।
ডেভ স্টিভেন্স

হ্যাঁ, আমার সাথে যোগ করার জন্য প্রতীকী লিঙ্কগুলিও প্রয়োজনীয় ছিল। আমি ভাবছি অন্যদের কীভাবে এটির প্রয়োজন হয়নি।
PEZO

2

কেবলমাত্র একটি উত্তর কার্ল ইনস্টলেশন স্থাপন করেছে তবে পুরো ডকফায়িল কাজ করে না

এখানে আমার ডকফাইফিল অনুলিপি / পেস্ট করার জন্য প্রস্তুত যেখানে আমি উবুন্টু 18.04.3 এলটিএস সহ সর্বশেষ এনভিএম 2020 সংস্করণ ইনস্টল করেছি

FROM ubuntu

RUN apt-get update
RUN echo "y" | apt-get install curl
ENV NVM_DIR /usr/local/nvm
RUN mkdir -p /usr/local/nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
ENV NODE_VERSION v10
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"

ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH

1

এটিই আমার পক্ষে কাজ করেছিল (আমি ডেবিয়ান বুস্টার ব্যবহার করছি):

RUN apt-get update
RUN apt-get install -y build-essential checkinstall libssl-dev
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash
SHELL ["/bin/bash", "--login", "-c"]

আপনার এখন করা উচিত nvm install <version>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.