Docker安装JDK17(安装其他应用同)

记录一下使用docker安装jdk17,安装其他应用也是通用的道理,只需换一下镜像版本即可。

安装命令

docker run -d --name jdk_17 -p 8080:8080 tomcat:10-jdk17-openjdk

该命令用于启动一个名为 jdk_17 的 Docker 容器,并将其后台运行,以便部署和访问 Java Web 应用。

参数

说明

docker run

启动一个新的容器。

-d

以**分离模式(detached mode)**运行容器,即在后台运行,不占用当前终端窗口。

--name jdk_17

为容器指定名称为 jdk_17

,便于后续管理操作(如查看日志、停止、删除等)。

-p 8080:8080

将宿主机的 8080 端口 映射到容器内部的 8080 端口。这样可以从外部通过访问宿主机的 http://<IP>:8080

来访问容器中的 Tomcat 服务。

tomcat:10-jdk17-openjdk

使用预装了 OpenJDK 17 的官方 Tomcat 10 镜像。该镜像已集成 JDK 环境,可直接运行基于 Servlet 5.0 的 Java Web 应用。

可能出现的问题

权限不足

执行上述命令时,可能会出现这个问题。

xq@ubuntu:~$ docker run -d --name jdk_17 -p 8080:8080 tomcat:10-jdk17-openjdk

docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied

Run 'docker run --help' for more information

这是因为当前用户(xq)没有权限访问 Docker 的守护进程(daemon)。Docker 默认需要 root 权限 或者属于 docker 用户组 才能执行相关命令。

解决方案1

使用 sudo 运行命令或者切换为 root 用户

sudo docker run -d --name jdk_17 -p 8080:8080 tomcat:10-jdk17-openjdk

或者

sudo -i

转为 root 用户再执行命令

解决方案2

将当前用户加入 docker 用户组

  • 创建 docker 组 (如果还没有)
  • sudo groupadd docker

  • 将当前用户添加到 docker 组中
  • sudo usermod -aG docker $USER

  • 验证是否成功
  • getent group docker

出现类似这种,就表示成功了,退出并重新登录终端或重启系统,使组权限生效

拉取镜像失败

解决方案

换源,首先切换 root 用户,方便操作

修改 配置

进入编辑页面

修改配置

{
  "registry-mirrors" : [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://dockerproxy.com",
    "https://gst6rzl9.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "http://mirrors.ustc.edu.cn/",
    "https://mirrors.tuna.tsinghua.edu.cn/",
    "http://mirrors.sohu.com/"
  ],
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug": true,
  "experimental": false
}

保存并退出:按 Ctrl + O 保存,按 Enter 确认,然后按 Ctrl + X 退出。

重新加载 systemd 配置

重启 Docker 服务

最后重新输入下载jdk的命令就可以成功下载了

### 如何在 Docker 中使用 JDK 17 镜像 为了在 Docker 容器中运行 Java 应用程序,可以基于官方的 OpenJDK 或 Oracle JDK 构建自定义镜像。对于特定版本如 JDK 17安装,通常有两种方法:一是利用现有的官方基础镜像;二是自行创建包含所需配置和依赖项的新镜像。 #### 使用官方提供的 JDK 17 基础镜像 最简便的方式是从 Docker Hub 获取预构建好的官方 OpenJDK 或者 Oracle JDK 镜像作为起点: ```bash docker pull openjdk:17-jdk-alpine ``` 此命令会拉取适用于大多数场景的基础镜像,它包含了必要的 JDK 工具链以及 Alpine Linux 发行版中的基本组件[^1]。 #### 自定义构建带有额外设置的 JDK 17 镜像 如果需要更复杂的环境定制化,则可以通过编写 `Dockerfile` 来实现这一点。下面是一个简单的例子展示如何制作一个包含最新稳定版 JDK 17 和一些常用字体支持(用于解决可能存在的中文显示问题)的 Docker 映像: ```Dockerfile FROM alpine:latest # 设置工作目录并下载 JDK WORKDIR /opt/ RUN apk add --no-cache curl && \ mkdir -p /usr/local/java && \ cd /usr/local/java && \ curl -O https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz && \ tar zxvf jdk-17_linux-x64_bin.tar.gz --strip-components=1 && \ rm jdk-17_linux-x64_bin.tar.gz ENV JAVA_HOME=/usr/local/java \ PATH=$PATH:/usr/local/java/bin # 添加字体库以防止日志中的汉字乱码现象 COPY ./fonts/*.ttc /usr/share/fonts/truetype/ CMD ["java", "-version"] ``` 上述脚本首先选择了轻量级的操作系统——Alpine Linux 作为底层操作系统,并通过一系列指令完成了 JDK 的获取与解压操作。接着设置了两个重要的环境变量来指明 Java 运行时的位置。最后一步则是复制预先准备好的 TrueType 字体文件到系统的共享字体路径下,从而确保应用程序能够正确渲染中文字符[^3]。 完成以上步骤之后,就可以按照如下方式编译新的映像并向其中注入任何其他所需的资源或应用代码了: ```bash docker build -t my-custom-jdk17 . ``` 一旦成功建立了这个新映像,便能轻松地启动容器实例来进行测试或其他开发活动: ```bash docker run -dit --name custom_jdk17_container my-custom-jdk17 java -version ``` 这将开启一个新的交互式终端连接至名为 `custom_jdk17_container` 的容器内执行指定命令验证Java版本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值