【问题标题】:Create Docker container with both Java and Node.js使用 Java 和 Node.js 创建 Docker 容器
【发布时间】:2023-03-03 22:32:01
【问题描述】:

我不知道为什么我希望这会起作用:

 # Dockerfile    
 FROM node:6
 FROM java:8

但它并没有真正起作用 - 看起来第一个命令被忽略了,而第二个命令起作用了。

有没有一种直接的方法可以在 Docker 容器中同时安装 Node.js 和 Java?

最终我要解决的问题是运行 Selenium Webdriver 时出现 ENOENT 错误 -

[20:38:50] W/start - Selenium Standalone server encountered an error: Error: spawn java ENOENT

现在我认为这是因为容器中没有安装 Java。

【问题讨论】:

    标签: java node.js selenium docker dockerfile


    【解决方案1】:

    dockerfile 中的FROM 只是告诉 docker 应该从哪个镜像开始配置。您不能简单地将多个图像连接在一起。已经有多个容器镜像可用,它们提供预安装的 Java 8 和节点 JS。我不想专门推荐任何图片,但会将您定向到docker-hub,以便您自行搜索并使用最适合您需求的容器。

    【讨论】:

      【解决方案2】:

      您可以为每个生成的图像使用单个 FROM。 尝试使用node 作为基础镜像并安装java。

      Dockerfile

      FROM node:latest
      RUN apt-get -y install default-jre
      

      您可以选择您需要的版本:

      apt install default-jre
      apt install openjdk-11-jre-headless
      apt install openjdk-8-jre-headless
      

      【讨论】:

      • 是的,我想,但这意味着我要多花 30 多秒的时间安装 java - 如果它是一个图像,它会快得多...
      • 在某些情况下,安装 java 需要一分钟,没有乐趣
      • 如何在node中安装java作为基础镜像
      【解决方案3】:

      对你来说最好的方法是使用 java(它已被官方弃用,它建议你使用 openjdk 图像)并在其中安装 node。

      所以,开始

      FROM openjdk:latest
      

      这将使用最新的openjdk镜像,此时为8u151。然后安装node 和您可能需要的其他依赖项:

      RUN apt-get install -y curl \
        && curl -sL https://deb.nodesource.com/setup_9.x | bash - \
        && apt-get install -y nodejs \
        && curl -L https://www.npmjs.com/install.sh | sh
      

      您可能想在之后安装 grunt 之类的东西,所以这也可能会派上用场。

      RUN npm install -g grunt grunt-cli
      

      您总共将获得以下 Dockerfile:

      FROM openjdk:latest
      
      RUN apt-get install -y curl \
        && curl -sL https://deb.nodesource.com/setup_9.x | bash - \
        && apt-get install -y nodejs \
        && curl -L https://www.npmjs.com/install.sh | sh \
      RUN npm install -g grunt grunt-cli
      

      你可以从我的 gitlab repo here 克隆 Dockerfile

      【讨论】:

      • 我更新了我的答案以包含最新版本的节点,应该是 7
      • 问题是这将在 Debian 上安装一个更旧版本的 nodejs - 我怎样才能获得更新版本的 npm 和 nodejs?对于nodejs,我使用“RUN curl -sL deb.nodesource.com/setup_6.x | sudo -E bash -”
      • openjdk:latest 映像的最新版本使用 Oracle Linux(基于 Red Hat 的发行版)作为其基础,而不是 Debian。这意味着apt 不再可用,而需要使用yum
      • 最新版openjdk:16-jdk-oraclelinux8,可惜好像没有yum了。
      • @MalcolmCrum openjdk oraclelinux8 图像使用 oraclelinux8 的精简版,它不再安装 yumdnf。相反,他们有microdnf,您使用相同的方式(例如从Dockerfile 安装cron):RUN microdnf update -y && microdnf install -y crongithub.com/oracle/container-images/issues/…
      【解决方案4】:

      使用节点 14 版,它对我来说非常适合:

      FROM openjdk:latest
      
      RUN apt-get install -y curl \
        && curl -sL https://deb.nodesource.com/setup_14.x | bash - \
        && apt-get install -y nodejs \
        && curl -L https://www.npmjs.com/install.sh | sh \
      RUN npm install -g grunt grunt-cli
      

      【讨论】:

        【解决方案5】:

        你也可以使用node镜像,然后安装default-jre

        # Dockerfile
        FROM node:latest
        RUN apt-get -y install default-jre
        

        你可以选择你需要的版本:

        apt install default-jre
        apt install openjdk-11-jre-headless
        apt install openjdk-8-jre-headless
        

        【讨论】:

          【解决方案6】:

          这对我有用:

          FROM openjdk:16-slim-buster
          
          RUN apt-get update; apt-get install -y curl \
              && curl -sL https://deb.nodesource.com/setup_14.x | bash - \
              && apt-get install -y nodejs \
              && curl -L https://www.npmjs.com/install.sh | sh 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-17
            • 2015-10-02
            • 1970-01-01
            • 2016-12-01
            • 2021-02-25
            相关资源
            最近更新 更多