【问题标题】:How to install package manager in java based docker image如何在基于 java 的 docker 镜像中安装包管理器
【发布时间】:2019-02-25 11:08:07
【问题描述】:

我正在使用 SpringBoot 和 Java 和 Docker 开发一个应用程序。

我想在我的应用程序中安装Netcat,以便在我的 spring 应用程序启动之前检查特定容器是否已启动。

我试过了

RUN apt-get update && apt-get -y install netcat && apt-get clean

但它说 apt-get 未找到。

我不确定如何在基于 java 的应用程序中安装任何包管理器。

或者有没有其他我可以安装 net-cat 的。

下面是我的Dockerfile

FROM openjdk:8
RUN apt-get update && apt-get -y install netcat && apt-get clean
ADD target/student.jar student.jar
EXPOSE 2018
ENTRYPOINT ["java","-jar","student.jar"]

【问题讨论】:

  • docker build期间是否出现错误?你也可以docker runopenjdk:8容器,进入它并尝试在那里执行apt-get吗?
  • 构建图像时出现错误
  • **你也可以 docker 运行 openjdk:8 容器,进入它并尝试在那里执行 apt-get 吗? ** 我在 docker 方面还没有那么先进。你能解释一下怎么做吗?
  • docker build . -t yourtag 进行构建(您需要从Dockerfile 中删除RUN 行),然后docker run -it yourtag /bin/bash 应该将您放入正在运行的容器的bash 中。然后可以尝试执行apt-get install
  • TBH 不确定docker run -it 是否可以在 Windows 上运行,但实际上找不到任何文档。

标签: java spring-boot docker apt netcat


【解决方案1】:

apt-get 是基于 Debian 的 Linux 发行版(包括 Ubuntu 等)的软件包管理器。

改用apk add

此外,如果您在 Dockerfile 中使用包管理器,则明确指定 Linux 发行版被认为是一种好习惯。在您的情况下,您可以使用 openjdk:8-jdk-stretch 变体或指定发行版的任何其他变体。

【讨论】:

    【解决方案2】:

    我可以通过这个Dockerfile获得成功的docker build

    FROM openjdk:8
    RUN apt-get update && apt-get -y install netcat && apt-get clean
    ENTRYPOINT ["/bin/bash"]
    

    apt-get 工作得很好。据我所知,openjdk:8 是 Ubuntu(或至少基于 Debian)。即使我跑了

    docker build . -t stackexample
    docker run -it stackexample
    

    进入容器,运行netcat 打开netcat cmd。

    【讨论】:

    • Docker 使用的是哪个操作系统?
    • @MehrajMalik Ubuntu 16.04
    • 可能是因为我使用的是Windows 10 pro。
    • 嗯。我原以为build 阶段会发生在“同一”VM 中,就像在其中运行容器一样。而且我觉得很奇怪,它只能做apt-get,但做其他所有事情。
    • 现在我知道为什么 MAC 这么贵了 :P
    猜你喜欢
    • 2020-09-01
    • 2023-01-23
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多