如何使用 nodejs 12、java、gcc、g++、python3、monocs 创建 docker 镜像

yog*_*tty -1 java node.js docker

我正在尝试 dockerize 我的 NodeJs & Express API 。在我的 API 中,我使用https://www.npmjs.com/package/compile-run包来编译和运行 C、Cpp、Java、JavaScript(Node.js env)、Python 语言。该软件包需要在服务器上安装所有 5 个编译器(gcc、g++、nodejs、python3、javac)。如果任何编译器未命中,它就会抛出错误。

在我的本地(undockerized)中,API 在 windows 和 ubuntu 上都运行良好(因为我已经在它们上面安装了编译器)。

我正在尝试在我的 docker 映像上复制相同的内容。但我被困住了。

看看我的 Dockerfile

FROM node:12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD ["npm","start"]
Run Code Online (Sandbox Code Playgroud)

我认为 node-12 图像带有 gcc、g++、python3 和 nodejs(显然)。但问题在于java。我无法编译 java 代码。

所以我这样试过

FROM node:12
RUN apt-get -y install default-jre
# RUN java -version
RUN apt -y install default-jre
RUN apt install openjdk-11-jre-headless
RUN java -version

WORKDIR /app


COPY package.json /app
RUN npm install
COPY . /app
CMD ["npm","start"]
Run Code Online (Sandbox Code Playgroud)

但是我无法使用 apt/apt-get 安装 open-jdk 或 open-jre。配置docker的正确方法是什么?

这是我的 nodeJS API 存储库https://github.com/yogendramaarisetty/online-compiler-api

Ell*_*sch 5

首先你必须用 更新包列表apt-get update,然后你才能安装 openjdk-8。openjdk-11 不适用于该节点分发版。我曾经docker run -it node:12 /bin/bash看到那里有什么,

FROM node:12
RUN apt-get update && apt-get install -y openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)

例如,

$ cat Dockerfile                                         
FROM node:12
RUN apt-get update && apt-get install -y openjdk-8-jdk
$ docker build --tag mynode:1.0 .
$ docker run -it mynode:1.0 /bin/bash                                    
root@d70858199dd1:/# java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0+deb9u1-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)
root@d70858199dd1:/# javac -version
javac 1.8.0_265
root@d70858199dd1:/#
Run Code Online (Sandbox Code Playgroud)

如果您确实需要 Java 11,可以通过多种方式和地点获得 openjdk-11。一种是bell-sw。例如,

$ cat Dockerfile
FROM node:12
RUN apt-get update && apt-get install -y libasound2 libxtst6
RUN wget https://download.bell-sw.com/java/11.0.7+10/bellsoft-jdk11.0.7+10-linux-amd64.deb && \
    apt install ./bellsoft-jdk11.0.7+10-linux-amd64.deb
$ docker build --tag mynode:1.1 .
$ docker run -it mynode:1.1 /bin/bash
root@37771ce98727:/# java -version
openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM (build 11.0.7+10-LTS, mixed mode)
root@37771ce98727:/# javac -version
javac 11.0.7
Run Code Online (Sandbox Code Playgroud)