首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sdkman不在dockerfile中安装java

sdkman不在dockerfile中安装java
EN

Stack Overflow用户
提问于 2019-08-31 05:06:23
回答 2查看 1.3K关注 0票数 1

我有这个docker文件:

代码语言:javascript
复制
# We are going to star from the jhipster image
FROM jhipster/jhipster

# install as root
USER root

### Setup docker cli (don't need docker daemon) ###
# Install some packages
RUN apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

# Add Dockers official GPG key:
RUN ["/bin/bash", "-c", "set -o pipefail && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -"]

# Add a stable repository
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Setup aws credentials as environment variables
ENV AWS_ACCESS_KEY_ID "change it!"
ENV AWS_SECRET_ACCESS_KEY "change it!"

# noninteractive install for tzdata
ARG DEBIAN_FRONTEND=noninteractive

# set timezone for tzdata
ENV TZ=America/Sao_Paulo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Install the latest version of Docker Engine - Community and also aws cli
RUN apt-get update && apt-get install docker-ce docker-ce-cli containerd.io awscli -y

# change back to default user
USER jhipster

# install skd and java version 1.8
RUN curl -s "https://get.sdkman.io" | bash
RUN bash $HOME/.sdkman/bin/sdkman-init.sh
RUN bash -c "sdk install java 8.0.222.j9-adpt"

当我运行一个命令从这个dockerfile构建一个镜像时,它在最后一步失败,并显示一条消息:

代码语言:javascript
复制
/bin/sh: 1: sdk: not found

当我在我的本地机器上安装它时,它在bash上运行sdkman (sdk)。但是在这个脚本中,它从sh而不是bash调用它。如何才能让它从sh调用skdman (Skdman)?我真正想做的是通过sdkman (Sdkman)安装一个特定的java版本。有没有别的办法呢?

EN

回答 2

Stack Overflow用户

发布于 2019-11-25 16:19:38

要使sdk命令可用,您需要运行source sdkman-init.sh

这是一个在centos上使用java11的工作示例。

代码语言:javascript
复制
FROM centos:latest

ARG CANDIDATE=java
ARG CANDIDATE_VERSION=11.0.6-open

ENV SDKMAN_DIR=/root/.sdkman

# update the image
RUN yum -y upgrade

# install requirements, install and configure sdkman
# see https://sdkman.io/usage for configuration options
RUN yum -y install curl ca-certificates zip unzip openssl which findutils && \
    update-ca-trust && \
    curl -s "https://get.sdkman.io" | bash && \
    echo "sdkman_auto_answer=true" > $SDKMAN_DIR/etc/config && \
    echo "sdkman_auto_selfupdate=false" >> $SDKMAN_DIR/etc/config

# Source sdkman to make the sdk command available and install candidate
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && sdk install $CANDIDATE $CANDIDATE_VERSION"

# Add candidate path to $PATH environment variable
ENV JAVA_HOME="$SDKMAN_DIR/candidates/java/current"
ENV PATH="$JAVA_HOME/bin:$PATH"

ENTRYPOINT ["/bin/bash", "-c", "source $SDKMAN_DIR/bin/sdkman-init.sh && \"$@\"", "-s"]
CMD ["sdk", "help"]
票数 5
EN

Stack Overflow用户

发布于 2021-04-11 07:04:34

问题是Dockerfile中的每个RUN命令都是在新的bash环境中执行的,所以您需要将最后两个命令放在同一行下,如下所示:

RUN bash $HOME/.sdkman/bin/sdkman-init.sh && bash -c "sdk install java 8.0.222.j9-adpt"

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57733198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档