如何在Ubuntu 16.04 Docker中安装systemctl?含替代方案
解决Docker容器中systemctl无法使用的问题
首先得明确:Docker容器默认是没有systemd(systemctl依赖的系统服务管理器)的,因为容器设计为单进程运行环境,不需要完整的init系统,所以你执行systemctl status mysql才会报"Failed to connect to bus"的错误。下面给你几个实用的解决方案:
方案1:用传统的service命令替代(最推荐)
Ubuntu 16.04里还保留了传统的service命令,完全可以用来管理mysql服务,不需要安装任何额外工具:
- 查看mysql状态:
service mysql status - 启动mysql:
service mysql start - 停止mysql:
service mysql stop - 重启mysql:
service mysql restart
方案2:在容器中安装systemd(不推荐,仅作了解)
如果非要用systemctl,你可以在容器里安装systemd,但这会让容器体积变大,违背容器轻量化的原则,步骤如下:
- 安装systemd及依赖:
apt-get update && apt-get install -y systemd systemd-sysv - 退出容器后,重新启动时需要添加特权参数并挂载cgroup(否则systemd无法正常运行):
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name your-mysql-container ubuntu:16.04 - 进入容器后就能正常使用
systemctl命令了。
方案3:使用官方MySQL镜像(最佳实践)
与其自己在Ubuntu容器里折腾安装mysql,不如直接用官方维护的MySQL镜像,它已经配置好了所有必要的环境,开箱即用:
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=your-root-password mysql:5.7
(注:Ubuntu 16.04对应的MySQL稳定版本是5.7,所以用这个tag)
额外验证方法
不管用哪种方案,你都可以通过以下方式确认mysql是否在运行:
- 查看进程:
ps aux | grep mysql,如果能看到mysql相关进程就说明运行正常 - 尝试登录:
mysql -u root -p,输入密码后能进入mysql命令行就没问题
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

