阿空kkk 发表于 2023-3-17 13:56

请教下如何在docker启动时让他自动执行指定的sh脚本

小弟纯小白一枚,非IT行业。去年收了台二手TS451D,一直当纯存储和相册服务器用,昨天心血来潮想跑个docker开minecraft服务器,和几个朋友一起玩,一切准备妥当后当然也是顺利开服。
但是由于我设定了nas每天自动开关机,所以每次都要手动开服,手动关服,挺麻烦,也担心哪天忘记关服导致存档丢失。
现在想能不能让docker在启动的时候自动运行一个sh脚本来实现自动开服,然后再运行一个定时sh脚本实现定时关服。

yugu91 发表于 2023-3-17 14:10

本帖最后由 yugu91 于 2023-3-17 14:11 编辑

抱歉,看错信息

monkeylab 发表于 2023-3-17 14:48

是运行sh脚本启动关闭docker还是docker运行sh脚本,
前者就是docker run和docker stop,后者你可以修改一下Dockerfile

阿空kkk 发表于 2023-3-17 14:52

monkeylab 发表于 2023-3-17 14:48
是运行sh脚本启动关闭docker还是docker运行sh脚本,
前者就是docker run和docker stop,后者你可以修改一下 ...

是docker运行sh脚本,请问dockerfile在什么位置要怎么打开,qnap自带的文件管理器无法找到

我醉了你呢 发表于 2023-3-17 15:03

我折腾了半天也没搞定docker跑饥荒服务器

阿空kkk 发表于 2023-3-17 18:36

我醉了你呢 发表于 2023-3-17 15:03
我折腾了半天也没搞定docker跑饥荒服务器

我是能跑,但是想增加一个自动开关服指令

永诺 发表于 2023-3-18 16:44

docker start 和docker stop啊
不过你NAS开机的时候设置docker服务自动启动 也就是systemctl enable docker.service
而你的容器设置为容器自动重启也就是--restart=always
这样不需要sh脚本了.
效果就是你nas开机启动docker服务,然后自动启动你的minecraft容器.
你nas关机,一切自然关闭

lionsee123 发表于 2023-3-18 16:53

加个sh脚本,然后以你现在的镜像为基础,重新打包一个镜像

YsHaNg 发表于 2023-3-19 08:41

写Dockerfile ENTRYPOINT

hycsy2896 发表于 2023-3-19 09:00

道理我都懂 但我还是没明白NAS每天重启一次的意义

xiaopang666 发表于 2023-3-19 09:28

还是威联通....每天开关机....那个速度....[睡觉]

阿空kkk 发表于 2023-3-19 20:12

xiaopang666 发表于 2023-3-19 09:28
还是威联通....每天开关机....那个速度....

起床到上班打卡差不多有50分钟,足够了。[狂笑]

阿空kkk 发表于 2023-3-19 20:13

本帖最后由 阿空kkk 于 2023-3-19 20:17 编辑

hycsy2896 发表于 2023-3-19 09:00
道理我都懂 但我还是没明白NAS每天重启一次的意义

风扇比较吵,晚上直接关掉

阿空kkk 发表于 2023-3-19 20:16

永诺 发表于 2023-3-18 16:44
docker start 和docker stop啊
不过你NAS开机的时候设置docker服务自动启动 也就是systemctl enable docker ...

docker容器开机自启是应用自带功能,但是自启minecraft服务器这个没有

阿空kkk 发表于 2023-3-19 20:17

YsHaNg 发表于 2023-3-19 08:41
写Dockerfile ENTRYPOINT

这一步就难住本菜鸟了[流汗]

阿空kkk 发表于 2023-3-19 20:20

lionsee123 发表于 2023-3-18 16:53
加个sh脚本,然后以你现在的镜像为基础,重新打包一个镜像

太难了,开服这一段我都是照着教程抄的[震惊]

最强发型师tony 发表于 2023-3-19 23:18

阿空kkk 发表于 2023-3-19 20:17
这一步就难住本菜鸟了

楼上正解,使用 entrypoint 或者 cmd 来给 docker 镜像设置启动命令。
楼主可以搜一下具体怎么写,参考博客:https://www.cnblogs.com/sparkdev/p/8461576.html

蓝色星芒 发表于 2023-3-20 00:13

本帖最后由 蓝色星芒 于 2023-3-20 00:21 编辑

方法一,
有做-v 的host和docker的文件映射吗?

如果有的话,那就在host里写个sh,可以以ping通docker为基准,ping不通就结束,ping同就延迟30s左右,使用docker的权限,运行启动服务的命令即可,然后把这个sh写到host的开启启动里。

方法二,
我只在debian系里用过,就说dockerfile添加环境参数运行。或者docker run里添加。
docker run -itd --name *** ***** --restart = always/bin/bash -c 服务sh的绝对路径 && tail -f /dev/null

没用过这些nas的docker,不太清楚docker的运行模式是什么样式的,不太好说。如果docker中有环境这个选项,可用试试把红色字加进去,tail -f /dev/null是为里让sh循环不退出,否则docker运行一次后就会关掉,也可以写在服务sh的里面最后一行添加一下。

YsHaNg 发表于 2023-3-20 02:38

最强发型师tony 发表于 2023-3-19 15:18
楼上正解,使用 entrypoint 或者 cmd 来给 docker 镜像设置启动命令。
楼主可以搜一下具体怎么写,参考博 ...

如果lz是直接类似从dockerhub pull镜像运行就可能没有dockerfile 这种可以把现有容器commit到一个镜像 然后新建dockerfile写FROM刚新建的镜像 之后dockerfile里想怎么改随自己

k8qxt5 发表于 2023-3-20 10:06

用compose写后面可以加cmd参数

enben 发表于 2023-3-21 09:27

搜索下docker ssh 这两个关键字,他的做法,默认开机启动sshd ,具体做法。可以在docker file ,或者自己做个脚本,指定开机运行这脚本。
页: [1]
查看完整版本: 请教下如何在docker启动时让他自动执行指定的sh脚本