当前位置: 首页 > 知识库问答 >
问题:

在Docker映像中安装Java

弓晔
2023-03-14

这是我第一次尝试创建Docker形象,我希望有人能帮助我。我的Dockerfile大致如下所示:

FROM mybaseimage:0.1
MAINTAINER ...

ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
RUN sed 's/main$/main universe/' -i /etc/apt/sources.list

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update

RUN apt-get install -y openjdk-7-jre && apt-get clean &&\
             mkdir temp_dir  &&   cd temp_dir && \
             ${JAVA_HOME}/bin/jar -xvf somejar.jar  &&\
             cd ..
ENTRYPOINT ["somescript.sh"]

基本上,我只是为了扩展jar文件而安装Java。运行makefile时,出现以下错误:

/bin/sh:1:/usr/lib/jvm/java-7-openjdk-amd64:权限被拒绝

我一直试图效仿这个例子:https://registry.hub.docker.com/u/barnybug/openjdk-7-jre/dockerfile/

编辑:注释中的每个请求这里是我的makefile:

DOCKER_REGISTRY=registry.mycompany.com
DOCKER_IMAGE=appimage-myapp
DOCKER_TAG=3.0

SUDO=

ARCHIVE_NAME=$(DOCKER_IMAGE):$(DOCKER_TAG)
  REPO_ARCHIVE_NAME=$(DOCKER_REGISTRY)/$(ARCHIVE_NAME)
  BASE_IMAGE_ARCHIVE=$(DOCKER_IMAGE)_$(DOCKER_TAG).tar.gz

all: $(BASE_IMAGE_ARCHIVE)

.PHONY: docker_image

docker_image: Dockerfile
    $(SUDO) docker build -t $(ARCHIVE_NAME) .

$(BASE_IMAGE_ARCHIVE): docker_image
  $(SUDO) docker tag -f $(ARCHIVE_NAME) $(REPO_ARCHIVE_NAME)
  $(SUDO) docker push $(REPO_ARCHIVE_NAME)
  $(SUDO) docker save $(ARCHIVE_NAME) | gzip -c > $@
  $(SUDO) docker rmi $(REPO_ARCHIVE_NAME)

和我一起跑的

make docker_image SUDO=sudo

共有3个答案

何甫
2023-03-14

FWIW,这是一个带有OpenJDK 11的节点16基本映像:

FROM node:16
RUN apt-get update && \
    apt-get install -y openjdk-11-jdk ca-certificates-java && \
    apt-get clean && \
    update-ca-certificates -f
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64/
RUN export JAVA_HOME
CMD ["java", "-version"]

您可以通过构建映像并运行容器来检查JDK安装:

docker build -t java11 . && docker run java11

应产生以下输出:

openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.13+8-post-Debian-1deb10u1, mixed mode, sharing)
雍焱
2023-03-14

我能够使用Ubuntu 18.04在图像上安装Java-11。我也只需要一个应用程序。Apache Tika周围的Python包装。)

FROM python:3.8.2-buster
COPY . /usr/src/app

# Install OpenJDK-11
RUN apt-get update && \
    apt-get install -y openjdk-11-jre-headless && \
    apt-get clean;

# Install PYTHON requirements
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# START WEBAPP SERVICE
CMD [ "python", "/usr/src/app/main.py" ]

希望有帮助。

武功
2023-03-14

我能够通过以下步骤安装OpenJDK 8(从这里开始)。我的Dockerfile继承自phusion/baseimage docker,它基于Ubuntu16.04 LTS。

# Install OpenJDK-8
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk && \
    apt-get install -y ant && \
    apt-get clean;
    
# Fix certificate issues
RUN apt-get update && \
    apt-get install ca-certificates-java && \
    apt-get clean && \
    update-ca-certificates -f;

# Setup JAVA_HOME -- useful for docker commandline
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME

要安装OpenJDK 7,您可能需要预先

add-apt-repository ppa:openjdk-r/ppa

使第一步成为

# Install OpenJDK-7
RUN add-apt-repository ppa:openjdk-r/ppa && \
    apt-get update && \
    apt-get install -y openjdk-7-jdk && \
    apt-get install -y ant && \
    apt-get clean;

我希望这有帮助。

 类似资料:
  • 问题内容: 我想创建一个docker镜像并正确安装,因此我选择具有这些属性的基础镜像。因此,的第一行如下: 然后下一个命令是 在创建docker映像时创建了以下错误: 如何能够在此docker映像中安装? 问题答案: 如提示: 获取(13:权限被拒绝) 我相信这是由于您的基本形象: https://github.com/SeleniumHQ/docker- selenium/blob/master

  • 我是Docker的新手。我创建了以下Dockerfile并运行它: 来自Centos:最新的ENV container docker运行YUM-Y更新&&yum clean all 我收到以下错误/输出: root@ggnlabvm-juper6:~/docker_test#docker build-t test。 将构建上下文发送到Docker守护进程2.048 kB 步骤1/3:来自Cento

  • 问题内容: 我使用带有标签的php docker容器作为基础: 我将它与可以在主机上找到的基本图像链接在一起。我创建了一个数据库,并用基本值填充了表。 但是尝试访问我的应用程序,我得到: 因此,我认为php容器缺少通过以下方式安装的组件: 我还在以下位置添加了mysql.ini: 如果我告诉我: 但是,错误仍然存​​在。 此外,在运行时: 我得到: 所以看来mysql扩展甚至没有被激活。 我究竟做

  • 我刚刚安装了ubuntu docker映像,当我执行“ifconfig”时,它说没有这样的命令,我尝试了apt-get install因为没有名为“ifconfig”的包(我可以安装一些其他映像)。 那么如何做到这一点呢?多谢了。

  • 问题内容: 我在Docker上安装了Ubuntu 14.04映像。之后,当我尝试在ubuntu映像中安装软件包时,我无法找到软件包错误: 如何解决这个错误? 问题答案: 这是因为映像中没有包缓存,因此需要运行: 在安装软件包之前,并且如果您的命令在Dockerfile中,则需要: 要取消命令的标准输出,请使用。例如