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