You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure上的Linux虚拟机中设置Docker容器开机自启

Docker容器开机自启配置失效原因及修复方案

失效原因

  • 脚本存储路径错误:/tmp是Linux系统的临时挂载目录,系统重启后所有内容会被自动清空,你放在该目录下的startup_script.sh开机后已经不存在,自然无法执行。
  • systemd服务依赖配置错误:你配置的After=default.target不符合需求,Docker容器启动需要依赖Docker服务和网络就绪,你设置的启动时机可能早于Docker、网络初始化完成,导致Docker命令执行失败。
  • 脚本本身存在语法问题:
    1. 脚本没有添加shebang声明(#!/bin/bash),系统无法识别脚本的执行环境
    2. 你写的docker run命令换行时没有加反斜杠\,会被系统识别为两条独立命令直接报错
    3. systemd服务默认以root身份运行,脚本里加sudo属于冗余操作,部分环境下反而会触发权限校验问题
  • 容器启动逻辑问题:每次执行docker run都会新建一个容器,如果上次重启前容器没有被删除,再次执行会因为8787端口被占用、容器名冲突等问题启动失败。

修复方案

方案一:修复现有systemd配置

  1. 移动脚本到持久化目录
    执行以下命令将脚本移动到/usr/local/bin(系统级可执行文件存放目录,重启不会丢失):
mv /tmp/startup_script.sh /usr/local/bin/
chmod +x /usr/local/bin/startup_script.sh
  1. 修改脚本内容
    将/usr/local/bin/startup_script.sh内容修改为以下格式,注意换行加反斜杠,优先启动已有容器避免重复新建:
#!/bin/bash
# 私有ACR请提前用root身份执行docker login myacr.azurecr.io完成认证
CONTAINER_NAME="rstudio_server"
if [ $(docker ps -a --filter "name=$CONTAINER_NAME" -q | wc -l) -eq 0 ]; then
    docker run -d --name $CONTAINER_NAME --restart=on-failure \
    -p 8787:8787 -e USER=rstudio \
    -e PASSWORD=mypassword myacr.azurecr.io/mycontainer
else
    docker start $CONTAINER_NAME
fi
  1. 修改systemd服务配置
    将/etc/systemd/system/run-at-startup.service内容修改为:
[Unit]
Description=Run Rstudio Docker container at startup
After=network.target docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/startup_script.sh
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
  1. 重载配置并启用服务
systemctl daemon-reload
systemctl enable run-at-startup.service

重启后可执行以下命令排查运行状态:

# 查看服务运行状态
systemctl status run-at-startup.service
# 查看服务运行日志
journalctl -u run-at-startup.service -f

方案二:更简单的Docker原生自启方案

无需编写systemd服务,直接在第一次运行容器时添加--restart=always参数,Docker服务启动时会自动拉起设置了重启策略的容器:

# 私有ACR请提前完成登录认证
docker run -d --restart=always -p 8787:8787 -e USER=rstudio \
-e PASSWORD=mypassword myacr.azurecr.io/mycontainer

配置后只需保证Docker服务本身是开机自启的(大多数Azure Linux镜像默认已开启,如未开启执行systemctl enable docker即可)。

内容的提问来源于stack exchange,提问作者Enrico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:06:04