k8s 一个容器启动多个阻塞进程

更多kubernetes文章: k8s专栏目录

本文记录了一个容器中同时启动tensorboard服务以及jupyter notebook服务,两个阻塞服务的过程。

思路:
在原有容器启动jupyter的基础上再启动tensorboard即可。

尝试1.启动 tensorboard即可
发现tensorboard启动成功,jupyter没有启动。原因是 增加command命令后覆盖了原有的jupyter启动命令
官方文档  https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/

那么先启动tensorboard,然后启动jupyter,因为两个进程都是阻塞式的,用nohup & 将tensorboard后台执行,然后正常启动jupyter。
尝试2.多command
时灵时不灵,感觉command执行没有顺序关系(没有验证)。可能先执行了阻塞式的jupyter,就不启动tensorboard了。

尝试3.将命令写在sh脚本里,挂载到容器中,然后执行脚本启动
挂载成功,但是执行找不到脚本。很奇怪。

尝试4./bin/sh -c "xxxxxx" 顺序执行
发现容器启动失败,也没有报错信息。在本地测试发现 &需要转义成\&,否则报错。
\& 违反yaml格式,格式检查就不通过。 
\\& 格式检查通过,但是实际执行成了\&,没有挂在后台执行,后面的jupyter没有启动。
查了bash -c使用方法 增加()开辟子shell执行方法 即可。 即 (nohup xxxxx &);(xxxx)
参考  https://blog.csdn.net/ysdaniel/article/details/6127860


思路5 脚本放到dockerfile里重新打包镜像,然后通过脚本启动

思路6 通过supervisor启动
Docker Container同时启动多服务  http://dockone.io/article/951     http://shiguanghui.iteye.com/blog/2294582



尝试记录 

          #/bin/sh -c "xxxxxx" 顺序执行 成功
          
command: ["/bin/bash"]
args: ["-c", "(nohup tensorboard --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &);(bash /run_jupyter.sh --allow-root)"]

          #多command 失败
          #command:
          #- nohup
          #- tensorboard
          #- --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &
          #command:
          #- bash
          #- /run_jupyter.sh
          #- --allow-root

          #失败
          #command: ["/bin/sh"]
          #args: ["-c", "nohup tensorboard --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &;bash /run_jupyter.sh --allow-root"]

          #失败
          #args: ["-c", "nohup echo 123 \\\\&;bash /run_jupyter.sh --allow-root"]

          #失败
          #command:
          #- bash /home/user1/notebooks/storage/start.sh


你可能感兴趣的:(kubernetes,kubernetes实践)