MCSManager icon indicating copy to clipboard operation
MCSManager copied to clipboard

请求根据 Docker 实例的类型修改实例的启动逻辑

Open Jerry-FaGe opened this issue 2 years ago • 4 comments

如 #889 中所说,docker 镜像在编译的时候由于有 WORKDIRCMD 以及 COPY 等指令,在用 MCSM 启动时是不需要指定启动命令和工作目录的。

经过在最新版本 MCSM 的测试,启动命令已经可以留空了,但工作目录还是必填的并且只能填本地的目录。这就会导致 docker 实例拿着镜像编译时 Dockerfile 里面的启动命令去跑宿主机本地的代码,并且这时 Dockerfile 里面的 WORKDIR 是完全失效的(貌似是 MCSM 把宿主机指定目录的文件拷了一份到 docker 里还改了工作目录)。

image

这种情况在本来就需要映射目录的 MC 服务器实例上可能感知不强,但对于其他提供 Docker 镜像的命令行程序来说,大多数程序会在编译镜像时就把自己的源码 COPY 到镜像中,用户只需要 pull 镜像下来 run 就好了,本地根本没有程序的源码。用 MCSM 运行这种实例时就会出现很多奇怪的问题。

综上所述希望可以针对这种情况修改配置逻辑,让用户可以自己决定 docker 实例的行为。

Jerry-FaGe avatar Jul 27 '23 07:07 Jerry-FaGe

也就是说,你希望「工作目录」也是可选项吗?如果为空则不覆盖 Docker 容器的 WORKDIR?

yumao233 avatar Jul 27 '23 09:07 yumao233

也就是说,你希望「工作目录」也是可选项吗?如果为空则不覆盖 Docker 容器的 WORKDIR?

我也只是说明一下问题,其实自己也并没有想明白太完美的解决方案😂 或许可以做个下拉选择框,让用户来选择自己是哪种情况,如果选择我说的这种情况就直接把「启动命令」和「工作目录」输入框隐藏,这样可能还能避免一些歧义

Jerry-FaGe avatar Jul 27 '23 11:07 Jerry-FaGe

我感觉,你直接在MCSM里不选择Docker,而是使用命令行去启动你的Docker镜像/容器比较合适。 MCSM自带的Docker功能会在MCSM实例启动后新建一个容器,而该实例关闭时自动销毁容器。你如果需要通过Docker存储数据,就只能使用MCSM的Docker容器自动挂载的WORKDIR。

huangsijun17 avatar Jul 27 '23 11:07 huangsijun17

我感觉,你直接在MCSM里不选择Docker,而是使用命令行去启动你的Docker镜像/容器比较合适。 MCSM自带的Docker功能会在MCSM实例启动后新建一个容器,而该实例关闭时自动销毁容器。你如果需要通过Docker存储数据,就只能使用MCSM的Docker容器自动挂载的WORKDIR。

目前来看也只能先这样用了(其实这个 issue 就是针对不需要存储数据本地也没有源码的那种程序来着

Jerry-FaGe avatar Jul 30 '23 06:07 Jerry-FaGe