我对docker概念完全陌生。我正在创建以下Dockerfile作为练习。
FROM ubuntu:latest
MAINTAINER kesarling
RUN apt update && apt upgrade -y
RUN apt install nginx curl zip unzip -y
RUN apt install openjdk-14-jdk python3 python3-doc clang golang-go gcc g++ -y
RUN curl -s "https://get.sdkman.io" | bash
RUN bash /root/.sdkman/bin/sdkman-init.sh
RUN sdk version
RUN yes | bash -c 'sdk install kotlin'
CMD [ "echo","The development environment has now been fully setup with C, C++, JAVA, Python3, Go and Kotlin" ]
我正在使用SDKMAN!安装
Kotlin
。最初的问题是,我不是在使用RUN bash /root/.sdkman/bin/sdkman-init.sh
,而是在使用RUN source /root/.sdkman/bin/sdkman-init.sh
。但是,它给出了错误信息 source
not found。因此,我尝试使用 RUN . /root/.sdkman/bin/sdkman-init.sh
和did not work。但是,RUN bash /root/.sdkman/bin/sdkman-init.sh
seems可以正常工作,因为它不会给出任何错误,并尝试运行下一个命令。但是, docker 然后给出错误信息sdk: not found
我要去哪里错了?
应当注意,这些步骤对于
Pop!_OS 20.04
的主机分发版(运行docker的主机)来说就像是魅力 最佳答案
实际上,脚本/root/.sdkman/bin/sdkman-init.sh
是sdk
的来源
source是bash的内置文件,而不是文件系统上的二进制文件。
source命令在当前shell中执行文件。
每条RUN指令将在当前镜像顶部的新层中执行任何命令,并提交结果。
生成的提交镜像将用于Dockerfile中的下一步。
试试这个:
FROM ubuntu:latest
MAINTAINER kesarling
RUN apt update && apt upgrade -y
RUN apt install nginx curl zip unzip -y
RUN apt install openjdk-14-jdk python3 python3-doc clang golang-go gcc g++ -y
RUN curl -s "https://get.sdkman.io" | bash
RUN /bin/bash -c "source /root/.sdkman/bin/sdkman-init.sh; sdk version; sdk install kotlin"
CMD [ "echo","The development environment has now been fully setup with C, C++, JAVA, Python3, Go and Kotlin" ]