为什么我不能在Dockerfile中运行命令,但可以在Docker容器中运行命令?

时间:2020-05-17 04:37:55

标签: docker

我有以下Dockerfile。 This是“ n”包。

<template>
  <v-container>
    <v-flex v-for="(user,index) in getUser" :key="index">
      {{ user.name }} {{user.age}}
      <v-icon @click="enterEditMode(index)">create</v-icon>
    </v-flex>
  </v-container>
</template>

<script>
import { mapGetters, mapMutations } from "vuex";
export default {
  name: "User",
  computed: {
    ...mapGetters({
      getUser: "getUser"
    })
  },
  methods: {
    ...mapMutations({
      setName: "setName",
      setAge: "setAge"
    }),
    enterEditMode(index) {
      this.setName(this.getUser[index].name);
      this.setAge(this.getUser[index].age);
      this.$router.push({ name: "EditMode", params: { index: index } });
    }
  }
};
</script>

这完美地完成了我期望的一切。

不幸的是,在通过<template> <v-card> <v-text-field solo v-model="name"></v-text-field> <v-text-field solo v-model="age"></v-text-field> <v-btn>Update Info</v-btn> </v-card> </template> <script> import { mapGetters } from "vuex"; export default { computed: { ...mapGetters({ getName: "getName", getAge: "getAge" }), name: { get() { return this.getName; }, set(val) { return this.$store.commit("setName", val); } }, age: { get() { return this.getAge; }, set(val) { return this.$store.commit("setAge", val); } } }, methods: { updateInfo() { this.$router.push('/') } } }; </script> 刷新终端之后,我似乎无法直接调用“ n”,而是不得不使用FROM ubuntu:18.04 SHELL ["/bin/bash", "-c"] # Need to install curl, git, build-essential RUN apt-get clean RUN apt-get update RUN apt-get install -y build-essential RUN apt-get install -y curl RUN apt-get install -y git # Per docs, the following allows automated installation of n without installing node https://github.com/mklement0/n-install RUN curl -L https://git.io/n-install | bash -s -- -y # This refreshes the terminal to use "n" RUN . /root/.bashrc # Install node version 6.9.0 RUN /root/n/bin/n 6.9.0 来引用确切的二进制文件。

但是,当我RUN . /root/.bashrc进入容器并运行上述命令序列时,我可以像这样调用“ n”:RUN /root/n/bin/n 6.9.0没问题。

为什么以下命令在Dockerfile中不起作用?

docker run -it container /bin/bash

尝试构建图片时出现以下错误:

Shell command: n 6.9.0

1 个答案:

答案 0 :(得分:1)

每个RUN命令运行一个单独的shell和一个单独的容器; RUN命令结束时,在RUN命令中设置的所有环境变量都会丢失。您必须使用ENV命令来永久更改$PATH之类的环境变量。

# Does nothing
RUN export FOO=bar
# Does nothing, if all the script does is set environment variables
RUN . ./vars.sh
# Needed to set variables
ENV FOO=bar

由于Docker映像通常仅包含一个预打包的应用程序及其运行时,因此您不需要这样的版本管理器。安装所需的语言运行时的单一版本,或使用https://www.moneycontrol.com/news/tags/coronavirus.html/page-2/

# Easiest
FROM node:6.9.0
# The hard way
FROM ubuntu:18.04
ARG NODE_VERSION=6.9.0
ENV NODE_VERSION=NODE_VERSION
RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install --assume-yes --no-install-recommends \
      curl
RUN cd /usr/local \
 && curl -LO https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz \
 && tar xjf node-v${NODE_VERSION}-linux-x64.tar.xz \
 && rm node-v${NODE_VERSION}-linux-x64.tar.xz \
 && for f in node npm npx; do \
      ln -s ../node-v${NODE_VERSION}-linux-x64/bin/$f bin/$f; \
    done