V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monetto
V2EX  ›  Docker

如何 Docker 在容器启动时执行某些脚本

  •  
  •   monetto · 2022-07-30 12:20:32 +08:00 · 1847 次点击
    这是一个创建于 854 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,想在容器启动时 自动 启动 ssh-server ,同时启动 Spring 项目。

    但是 Google 搜索的大部分都是 直接使用 SpringBoot 的 Docker Image 去启动项目。

    目前想用自己的一个自定义的容器去做这些事... 就是在 Docker 容器启动的时候,自动去执行某些启动脚本。

    容器已经设置了 --restart=always ,但是实测,宿主机重新启动的时候,不会执行 /etc/init.d 下面的脚本...

    求助大佬..

    6 条回复    2022-07-31 03:01:46 +08:00
    caryqy
        1
    caryqy  
       2022-07-30 12:27:49 +08:00
    supervisor
    y830CAa5nink4rUQ
        2
    y830CAa5nink4rUQ  
       2022-07-30 12:28:53 +08:00
    自己弄个 supervisord 作为 pid 1 不就好了
    singerll
        3
    singerll  
       2022-07-30 16:23:42 +08:00 via Android
    dockerfile 的 cmd 参数里面,直接自定义个脚本
    momocraft
        4
    momocraft  
       2022-07-30 17:38:54 +08:00
    首先一个容器同时跑 ssh 和应用是不推荐的做法。如果是为了开发不如用 docker exec 代替 ssh

    -----------

    常见做法是设计一个容器内路径,让 entrypoint 脚本逐个执行此路径内的脚本

    比如 dockerhub mysql 镜像的 entrypoint
    Privileges
        5
    Privileges  
       2022-07-30 17:57:00 +08:00
    Dockerfile 用 entrypoint 去调用你项目的启动脚本

    另外为什么要 SSH 的方式进去容器,exec 不更方便么
    ByteCat
        6
    ByteCat  
       2022-07-31 03:01:46 +08:00 via iPhone
    自己写一个 entrypoint.sh
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:20 · PVG 07:20 · LAX 15:20 · JFK 18:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.