天天看点

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

导语:交付需要把所有服务放到一个容器中,并且控制台重启对应服务是通过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如下

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

容器env信息

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

猜测是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
           
[问题已处理]-在容器中使用systemctl服务秒失败

修改后重启zk服务

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

启动成功

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

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