如何在 docker 文件和 docker 容器中设置较旧的流星版本

How to setup a older meteor version in dockerfile, and docker container

我在本地有一个项目 运行 meteor 和 node.js。 meteor 版本是 2.4,node.js 版本是 8.9.4,我有 meteor/release 文件让 meteor 版本是 2.2 这样 meteor 和 node 可以一起工作。

(base) xxx$ meteor --version
Meteor 2.4
(base) xxx$ node -v
v8.9.4

看起来不错,所以我将这个项目部署到 docker 容器到服务器。我写的Dockerfile第一行

# node version dependent on meteor version
FROM node:8.9.4

成功部署后,docker 日志显示错误 siad。

Waiting for mongodb server to start - sleeping
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: /app/bundle/main.js
error:   undefined
data:    /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data:    /app/bundle/main.js:34 - error: Forever detected script exited with code: 1

我查看里面docker,节点版本是8.9.4

(base) [xxx]$  docker exec -it -u root tblbuilder_meteor_1 /bin/bash -c 'node --version'
v8.9.4

所以我假设它是流星版本。但首先我不知道如何在 docker 中检查流星版本。第二,为什么会这样?我确定发布文件已更新为推送项目文件夹。

在大佬的帮助下,我有点明白了。在本地我使用 meteor 2.2,在 docker 文件中我使用 node.js 8.9.4 使用 meteor2.2。所以我剩下的就是修改DOCKERFILE,将它从节点8.9.4更改为节点12。下面是我的Dockerfile文件,我尝试将其更改为节点12.22.2,但它一直报错,我花了一天时间解决它们。目前,我在安装 r-base 部分进行堆栈。 是否有一些将节点 8 更改为节点 12 的指南。

# node version dependent on meteor version
FROM node:8.9.4
# I am going to use 12.22.2
#FROM node:12.22.2

# (even if copied as root you still need to change)
# https://github.com/moby/moby/issues/6119
COPY ./compose/meteor/entrypoint.sh /entrypoint.sh
COPY ./compose/meteor/run_app.sh /run_app.sh
COPY ./compose/meteor/r-cran.pgp /r-cran.pgp
COPY ./settings/settings.json /app/settings.json
COPY ./requirements.txt /requirements.txt
COPY ./r_requirements.sh /r_requirements.sh

# set locale to utf8: https://github.com/docker-library/docs/pull/703/files
# added [check-valid-until=no] & Acquire::Check-Valid-Until "false"; https://unix.stackexchange.com/questions/508724/failed-to-fetch-jessie-backports-repository
# Needs work to bring it up-to-date
RUN \
    echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list && \
    sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list && \
    apt-get -o Acquire::Check-Valid-Until=false update && \
    \
    sh -c 'echo "deb [check-valid-until=no] http://cran.rstudio.com/bin/linux/debian jessie-cran35/" >> /etc/apt/sources.list' && \
    apt-key add /r-cran.pgp && \
    \
    apt-get -o Acquire::Check-Valid-Until=false update && \
    apt-get -o Acquire::Check-Valid-Until=false install -y locales && \
    \
    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
    export LC_ALL=en_US.UTF-8 && \
    export LANG=en_US.UTF-8 && \
    export LANGUAGE=en_US.UTF-8

ENV LANG en_US.utf8
ENV LC_ALL en_US.UTF-8

# add rstudio debian install for R (requires version >3.3)
# https://cran.r-project.org/bin/linux/debian/
# install R from apt-get
# install python 3.6 from source :/

RUN apt install -y --force-yes r-base-core r-recommended r-base-html r-base-core

RUN apt-get install -y --force-yes wget bsdtar r-base r-base-dev && \
    apt-get clean && \
    \
    wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz && \
    tar zxf Python-3.6.5.tgz && \
    cd ./Python-3.6.5 && \
    ./configure && \
    make && \
    make altinstall && \
    cd .. && \
    rm Python-3.6.5.tgz && \
    rm -rf ./Python-3.6.5

# create paths and users
# change executable permissions
RUN npm install forever -g && \
    \
    mkdir -p /app/production && \
    mkdir -p /app/logs && \
    mkdir -p /app/crons && \
    \
    groupadd -r app && \
    useradd -m -d /home/app -g app app && \
    \
    chmod +x /entrypoint.sh && \
    chmod +x /run_app.sh && \
    chmod +x /r_requirements.sh && \
    chmod +x /requirements.txt && \

    \
    chown -R app:app /app && \
    chown app:app /entrypoint.sh && \
    chown app:app /run_app.sh && \
    chown app:app /r_requirements.sh &&\
    chown app:app /requirements.txt

USER app

# 1) install R packages
# 2) install python packages
RUN export "R_LIBS=/home/app/R_libs" && \
    mkdir /home/app/R_libs && \
    bash /r_requirements.sh && \
    \
    /usr/local/bin/pip3.6 install --user -r /requirements.txt

USER root
COPY ./compose/meteor/src/src.tar.gz /app/src.tar.gz
COPY ./src/private /app/src/private
RUN chown -R app:app /app

USER app
RUN cd /app && \
    bsdtar -xzvf src.tar.gz && \
    npm install --prefix /app/bundle/programs/server --production

ENTRYPOINT ["/entrypoint.sh"]

你的测试有很多错误的理解:

  1. 你的Meteor版本是2.2,因为是你项目里面的版本;
  2. 要查看此 Meteor 项目的 Node 版本,请查看许多人在
  3. 中发送给您的答案
  4. 通常,我们构建 Meteor,这意味着将其转换为 NodeJS 包构建,然后,在 Docker 内部您不需要 Meteor。
  5. 我们需要查看您的 Docker 文件并了解您构建 Docker 图像的过程。