docker启动容器后又自动关闭,无法run起来(特别是在docker桌面端)

项目场景:
比如通过下面该命令run一个容器,容器生成后发现既没有任何报错也没有消息提示但是就是自动关闭了。

docker run -it -P --name=“容器名” [镜像名]

原因分析:
docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出。
容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出

解决方案:
在最后加上/bin/bash就可以了。例如在上面的基础上。

docker run -it -P --name=“容器名” [镜像名] /bin/bash

有时候要加上 --gpus all才能用显卡资源
docker run --gpus all -it -p 8080:8080 -p 8081:8081 pcdet_image:v1 /bin/bash

### 配置Docker以在启动自动运行带有桌面环境的容器 #### 启动带图形界面的应用程序 为了使Docker容器能够在启动自动加载并显示桌面环境,通常需要解决X11转发的问题。Linux下的图形应用程序通过X Window System (也称为X11) 来创建窗口和绘制UI组件。 对于本地主机与容器之间的交互,可以通过设置`DISPLAY`环境变量来实现这一点[^1]。具体来说: - 主机上应该已经安装了一个X服务器(例如VcXsrv或Xming),用于接收来自容器内GUI应用的请求。 - 在启动容器之前,先确认宿主机上的X server正在运行,并允许网络连接访问它。 - 使用`docker run`命令中的`-e DISPLAY=$DISPLAY`选项传递当前系统的DISPLAY值给容器,同时使用`--net=host`参数简化网络配置以便于X11通信[^2]。 ```bash export DISPLAY=$(ip route show | grep -oP 'src \K\S+'):$DISPLAY xhost +local:docker # 允许来自docker容器的连接 docker run -it --rm \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=$DISPLAY \ your_image_name_with_desktop_env ``` 这段脚本做了如下几件事: - 设置了正确的IP地址作为`DISPLAY`变量的一部分; - 给予权限让名为`docker`用户的进程能够向X server发送请求; - 将宿主机的`.X11-unix`目录挂载到容器内部,使得两者共享Unix socket文件,从而完成X11协议的数据交换; - 运行指定含有桌面环境镜像的容器实例。 请注意,上述方法适用于Linux和macOS平台;而在Windows平台上,则需额外考虑如何正确配置X服务软件如VcXsrv等。 另外一种更现代的方式是在基于Wayland协议的新一代Linux发行版中处理图形化应用程序。然而,由于大多数官方基础镜像仍然默认支持X11而不是Wayland,因此这里主要讨论的是针对X11的情况。 #### 自定义入口点脚本 为了让容器每次重启都能自动进入桌面模式,可以在构建自定义Dockerfile时加入特定的服务管理机制,比如systemd或者supervisord,用来确保多个后台进程协同工作正常启动整个桌面会话。不过这可能涉及到较为复杂的初始化过程和服务依赖关系调整。 另一种简单的方法是编写一个简单的shell脚本来充当容器的主要执行体,在这个脚本里依次调用必要的命令来激活桌面环境及其相关联的服务。最后把这个脚本设为ENTRYPOINT指令的内容之一。 ```dockerfile FROM ubuntu:latest ... COPY start-desktop.sh / RUN chmod +x /start-desktop.sh CMD ["/bin/bash", "/start-desktop.sh"] ``` 其中`start-desktop.sh`可能是这样的形式: ```sh #!/bin/sh set -e # Start any required services here, e.g., Xvfb for headless display. service lightdm start & exec "$@" ``` 此脚本会在容器启动期间按照顺序执行一系列预定义的操作,最终达到自动化部署的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不搞学术柒柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值