[问题已处理]-在容器中使用systemctl服务秒失败

博客讲述了在Docker容器中使用systemctl启动服务遇到的问题,包括Zookeeper服务启动失败且无日志输出。问题定位为环境变量配置不正确,通过调整环境变量设置,特别是指定JAVA_HOME,最终成功启动服务。文章强调了环境变量配置在容器服务启动中的关键作用。
摘要由CSDN通过智能技术生成

导语:交付需要把所有服务放到一个容器中,并且控制台重启对应服务是通过systemctl操作的。因此需要对应容器支持systemctl

要支持systemctl需要--privileged=true

docker run -d -i -t --privileged=true --name java-systemd -v /sys/fs/cgroup:/sys/fs/cgroup:ro test:01

创建/lib/systemd/system/zk.service 并且执行systemctl enable zk.service

systemctl启动zk发现zk光速失败,并且zookeeper.out里没有日志

手动启动服务没有问题。

容器内/etc/profile如下

容器env信息

猜测是java环境的问题。

在/lib/systemd/system/zk.service加上一条

Environment="PATH=/opt/jdk1.8.0_151/bin:/opt/jdk1.8.0_151/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

这里测试在容器的/etc/profile中添加以下内容也不行 必须要在上面添加,可能需要添加在~/.bashrc下

export JAVA_HOME=/opt/jdk1.8.0_151
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

完整zk.service如下

[Unit]
Description=zookeeper.service
After=network.target
[Service]
Type=forking
Environment="PATH=/opt/jdk1.8.0_151/bin:/opt/jdk1.8.0_151/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
#Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin://usr/local/jdk1.8.0_231/bin"
User=root
Group=root
ExecStart=/opt/zk1/zookeeper-3.4.10/bin/zkServer.sh  start
ExecStop=/opt/zk1/zookeeper-3.4.10/bin/zkServer.sh   stop
[Install]
WantedBy=multi-user.target

修改后重启zk服务

启动成功

如果其他服务启动失败 应该也是env相关的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值