Dockerfile-debian8-jdk8-ssh

本博客介绍了一个基于官方jdk8的Docker镜像,该镜像集成了常用软件,并实现了容器间的免密登录功能,适用于同一网段内的容器通信。镜像还包含了vim编辑器的配置和一些shell别名设置。

造个轮子 - 基础镜像

说明

  1. 镜像基于官方镜像jdk8.
  2. 在基础镜像上安装了常用软件, 值得一提的是, 本机做了免密登录, 这样做的好处就是使用该镜像启动的所有容器, 只要在同一网段, 皆可不用再做配置即可免密登录.
  3. 另外镜像加载了一些常用配置, 如vim.
#Dockerfile-debian8-jdk8-ssh
FROM java:8-jdk
MAINTAINER XIAOWS <xiaows08@163.com>

RUN echo 'deb http://mirrors.aliyun.com/debian stretch main' > /etc/apt/sources.list;\
    echo '#deb-src http://mirrors.aliyun.com/debian stretch main' >> /etc/apt/sources.list;\
    echo 'deb http://mirrors.aliyun.com/debian stretch-updates main' >> /etc/apt/sources.list;\
    echo '#deb-src http://mirrors.aliyun.com/debian stretch-updates main' >> /etc/apt/sources.list;\
    echo 'deb http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list;\
    echo '#deb-src http://mirrors.aliyun.com/debian-security stretch/updates main' >> /etc/apt/sources.list;\
    apt-get update;\
    apt-get install -y openssh-server wget curl net-tools vim fping;\
    apt-get clean;\
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '';\
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;\
    echo '\tStrictHostKeyChecking no' >> /etc/ssh/ssh_config;\
    echo 'set ts=4' > /root/.vimrc;\
    echo 'set expandtab' >> /root/.vimrc;\
    echo 'set nu' >> /root/.vimrc;\
    echo "alias ll='ls -alhF'" >> /root/.bashrc;\
    echo "alias la='ls -A'" >> /root/.bashrc;\
    echo "alias l='ls -CF'" >> /root/.bashrc;

# ENTRYPOINT ["service ssh start;"]
CMD ["sh", "-c", "service ssh start; bash"]

COPY ./Dockerfile-* /root/
复制代码

构建镜像

docker build -f Dockerfile-debian8-jdk8-ssh -t xiaows/debian8-jdk8-ssh:2.0 .

转载于:https://juejin.im/post/5b7eac0fe51d4538c5453f99

<think>好的,我现在要解决的问题是用户报告在slave1和slave2节点上执行java -version时提示未找到命令,需要找到原因并提供解决方案。首先,我需要回想一下可能的原因,然后一步步分析。 首先,用户提到这两个节点是slave节点,可能属于某个集群,比如Hadoop或者Jenkins集群。根据用户提供的引用,特别是引用[3],他们可能在使用Jenkins,因为里面提到了Jenkins的启动脚本和端口。但问题本身是关于Java命令未找到,所以可能和Java环境有关。 接下来,可能的第一个原因是Java没有安装。用户可能在主节点安装了Java,但slave节点没有安装。或者是安装了不同版本的Java,路径没有正确配置。另外,环境变量可能没有正确设置,比如PATH没有包含Java的bin目录。 我应该分步骤来排查。首先检查Java是否安装。用户需要在slave节点上运行命令查看是否存在Java。例如,使用which java或者find命令查找可能的安装路径。如果找不到,说明需要安装Java。如果找到了,可能是环境变量的问题。 然后,检查环境变量。查看.bashrc、.bash_profile或者/etc/profile中是否有JAVA_HOME的设置,并且PATH是否包含$JAVA_HOME/bin。用户可能没有正确配置这些文件,或者在配置后没有source导致环境变量未生效。 另一个可能性是用户使用了不同的用户登录slave节点,比如用root安装了Java,但当前用户没有权限或者环境变量未配置。需要确认执行java命令的用户是否有权限访问Java安装目录。 此外,如果节点是通过容器或虚拟机运行的,可能Java未安装在这些环境中。比如引用[3]中的情况是在容器里运行Jenkins,可能容器内没有安装Java,这时候需要在容器内安装或者挂载宿主机的Java路径。 解决方案步骤应该是: 1. 检查Java是否安装:使用命令如`find / -name java`或者在标准安装路径下查看。 2. 如果未安装,选择合适的版本安装,比如OpenJDK或者Oracle JDK。 3. 配置环境变量,确保JAVA_HOME和PATH正确设置。 4. 应用环境变量,使用source命令或重新登录。 5. 验证java -version是否生效。 6. 如果使用容器,可能需要重新构建镜像包含Java或者在启动时挂载。 另外,用户可能需要根据集群的管理工具来统一安装Java,比如Ansible批量安装,或者使用配置管理工具确保所有节点环境一致。 需要提醒用户注意权限问题,安装Java可能需要root权限,使用sudo或者切换到管理员账户。还有确认安装的Java版本是否符合应用需求,比如某些应用需要特定版本。 可能的问题还包括,节点架构是否匹配(比如安装的是x86的Java但节点是ARM),但这种情况比较少见。或者Java的可执行文件没有正确链接,比如/usr/bin/java符号链接是否正确指向安装路径。 总结下来,步骤应该是先确认安装状态,再处理环境变量,最后考虑权限和系统架构等因素。同时,结合用户提供的引用,如果slave节点是通过某种自动化部署的,可能需要检查部署脚本中是否遗漏了Java的安装步骤。</think>### 排查与解决 Slave 节点 `java -version` 未找到命令的问题 #### 1. **确认 Java 是否安装** - **检查 Java 安装路径** 在 Slave 节点上执行以下命令,搜索 Java 可执行文件: ```bash find / -name java 2>/dev/null ``` 若输出为空或未找到标准路径(如 `/usr/bin/java`),则说明 Java 未安装[^1]。 - **查看默认安装路径** OpenJDK 或 Oracle JDK 的默认安装路径通常为 `/usr/lib/jvm` 或 `/opt`。检查是否存在类似目录: ```bash ls /usr/lib/jvm ``` #### 2. **安装 Java** - **使用包管理器安装** 若未安装 Java,根据系统类型选择命令: - Ubuntu/Debian: ```bash sudo apt update && sudo apt install openjdk-11-jdk ``` - CentOS/RHEL: ```bash sudo yum install java-11-openjdk-devel ``` - **手动安装(可选)** 下载 JDK 压缩包(如 `jdk-11.0.12_linux-x64_bin.tar.gz`),解压到 `/opt` 或自定义路径: ```bash tar -xzf jdk-11.0.12_linux-x64_bin.tar.gz -C /opt ``` #### 3. **配置环境变量** - **设置 `JAVA_HOME` 和 `PATH`** 编辑用户环境变量文件(如 `~/.bashrc` 或 `/etc/profile`): ```bash export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换为实际路径 export PATH=$JAVA_HOME/bin:$PATH ``` 应用配置: ```bash source ~/.bashrc # 或 source /etc/profile ``` - **验证配置** 执行以下命令,确认路径生效: ```bash echo $JAVA_HOME # 应输出 Java 安装路径 which java # 应输出 $JAVA_HOME/bin/java ``` #### 4. **权限与用户问题** - **检查用户权限** 若 Java 安装在受限目录(如 `/opt`),确保当前用户有执行权限: ```bash ls -l $JAVA_HOME/bin/java ``` 若无权限,使用 `chmod` 或切换至管理员账户安装。 - **多用户环境配置** 若为多用户系统,建议在 `/etc/profile.d/` 下创建全局配置文件(如 `java.sh`),避免重复配置。 #### 5. **容器或虚拟化环境** - **容器内安装 Java** 若 Slave 节点为 Docker 容器(如引用[3]的 Jenkins 容器),需在 Dockerfile 中添加 Java 安装步骤: ```Dockerfile FROM jenkins/jenkins:lts USER root RUN apt update && apt install -y openjdk-11-jdk ``` - **挂载宿主机的 Java** 启动容器时挂载宿主机 Java 目录: ```bash docker run -v /usr/lib/jvm:/usr/lib/jvm -it jenkins/jenkins:lts ``` #### 6. **验证结果** - 执行命令确认 Java 版本: ```bash java -version ``` 预期输出类似: ``` openjdk version "11.0.12" 2023-10-17 OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2) OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2, mixed mode, sharing) ``` --- ### 常见问题补充 - **问题1:环境变量未生效** 确保执行 `source` 命令或重新登录终端。若通过 SSH 执行命令,需在会话中加载环境变量。 - **问题2:多版本 Java 冲突** 使用 `update-alternatives` 管理多版本: ```bash sudo update-alternatives --config java ``` - **问题3:架构不匹配** 确认安装的 Java 版本与系统架构一致(如 `x86_64` 或 `aarch64`)。 --- ### 相关问题 1. 如何在 Linux 系统中彻底卸载 Java? 2. 如何通过 Ansible 批量配置集群节点的 Java 环境? 3. 容器化环境中如何优化 Java 内存配置?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值