首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测码头是否应该运行或启动容器在启动-使用系统d,但它不断传播错误-如何停止?

检测码头是否应该运行或启动容器在启动-使用系统d,但它不断传播错误-如何停止?
EN

Stack Overflow用户
提问于 2019-02-14 23:41:48
回答 1查看 270关注 0票数 0

我试图在Google Compute Engine实例上使用一个启动脚本来实现以下两种方法之一:

  1. 如果名为rstudio的停靠容器存在但处于已停止状态,则运行docker start rstudio
  2. 如果没有码头容器,请运行rstudio run --name=rstudio rocker/rstudio

从这个SO中,我认为可以通过docker top rstudio || docker run --name=rstudio rocker/rstudio实现这一点,但似乎总是在docker top rstudio部分出错。在这种情况下,我尝试了管道docker top rstudio &>/dev/null,但没有效果。

我有一个当实例启动时运行的云配置。

我的问题是,要运行或启动容器的脚本一直注册为错误,并且没有继续拖放图像的逻辑。我尝试过将它放在单独的bash脚本中,并直接通过ExecStart --也把"-“放在ExecStart命令前面(应该忽略错误吗?)但这似乎也没有效果。这就是我最后的归宿:

代码语言:javascript
运行
复制
#cloud-config

users:
- name: gcer
  uid: 2000

write_files:
- path: /home/gcer/docker-rstudio.sh
  permissions: 0755
  owner: root
  content: |
    #!/bin/bash

    echo "Docker RStudio launch script"
    if ! docker top rstudio &>/dev/null
    then
      echo "Pulling new rstudio"
      docker run -p 80:8787 \
                 -e ROOT=TRUE \
                 -e USER=%s -e PASSWORD=%s \
                  -v /home/gcer:/home/rstudio \
                  --name=rstudio \
                  %s
    else
      echo "Starting existing rstudio"
      docker start rstudio
    fi

- path: /etc/systemd/system/rstudio.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=RStudio Server
    Requires=docker.service
    After=docker.service

    [Service]
    Restart=always
    Environment="HOME=/home/gcer"
    ExecStartPre=/usr/share/google/dockercfg_update.sh
    ExecStart=-/home/gcer/docker-rstudio.sh
    ExecStop=/usr/bin/docker stop rstudio

runcmd:
- systemctl daemon-reload
- systemctl start rstudio.service

无论我尝试什么,在运行sudo journalctl -u rstudio.service时,我都会得到这个错误日志。

代码语言:javascript
运行
复制
Feb 14 23:26:09 test-9 systemd[1]: Started RStudio Server.
Feb 14 23:26:09 test-9 docker[770]: Error response from daemon: No such container: rstudio
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Control process exited, code=exited status=1
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Unit entered failed state.
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Failed with result 'exit-code'.
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Service hold-off time over, scheduling restart.
Feb 14 23:26:09 test-9 systemd[1]: Stopped RStudio Server.
Feb 14 23:26:09 test-9 systemd[1]: Starting RStudio Server...
...
Feb 14 23:26:09 test-9 systemd[1]: Started RStudio Server.
Feb 14 23:26:09 test-9 docker[809]: Error response from daemon: No such container: rstudio
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Control process exited, code=exited status=1
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Unit entered failed state.
Feb 14 23:26:09 test-9 systemd[1]: rstudio.service: Failed with result 'exit-code'.
Feb 14 23:26:10 test-9 systemd[1]: rstudio.service: Service hold-off time over, scheduling restart.
Feb 14 23:26:10 test-9 systemd[1]: Stopped RStudio Server.
Feb 14 23:26:10 test-9 systemd[1]: rstudio.service: Start request repeated too quickly.
Feb 14 23:26:10 test-9 systemd[1]: Failed to start RStudio Server.
Feb 14 23:26:10 test-9 systemd[1]: rstudio.service: Unit entered failed state.
Feb 14 23:26:10 test-9 systemd[1]: rstudio.service: Failed with result 'exit-code'.

有人能帮我把这事做好吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-15 02:27:07

当你停下来的时候我会删除这个容器。然后,您的启动脚本简化为额外确保容器被删除,并无条件地重新对其进行docker run处理。

这将使脚本的全部内容如下:

代码语言:javascript
运行
复制
#!/bin/sh
docker stop rstudio
docker rm rstudio
docker run -p 80:8787 \
   --name=rstudio \
   ... \
   rstudio run --name=rstudio rocker/rstudio

如果没有set -e选项,即使前面的命令失败(因为容器不存在),脚本仍然会继续到docker run命令。这避免了试图确定容器是否存在的任何测试,并且总是使您处于一致状态。

类似地,为了更好地清理,我会在容器停止后更改systemd单元文件以删除它。

代码语言:javascript
运行
复制
ExecStop=/usr/bin/docker stop rstudio
ExecStopPost=/usr/bin/docker rm rstudio

(您的设置有三种可能的状态:容器正在运行;容器存在但被停止;容器不存在。我的安装程序删除了“存在但停止”状态,该状态没有太多的值,特别是因为您使用docker run -v选项将数据存储在容器空间之外。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54700773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档