Docker容器1号进程问题

本文解析了容器中1号进程的概念及其重要性,并探讨了如何通过不同方式设置1号进程来实现容器的优雅关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1号进程是什么

当我们使用 /bin/bash 启动一个centos的容器

docker run -it --rm centos:7 /bin/bash

那么启动命令就是1号进程

[root@ded49b74042c /]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.2  0.0  11836  2952 pts/0    Ss   01:02   0:00 /bin/bash
root        16  0.0  0.0  51740  3528 pts/0    R+   01:06   0:00 ps aux

这个/bin/bash是没有启动进程的权限的,应为启动进程必须是systemd 或者init 这就意味着,容器也会跟着这个进程的消亡而关闭

如何解决

将1号进程变成systemd ,这个方法需要提权,但是提权会使容器锁住,不建议这么做

docker run --restart always  -d  --name test  --privileged  centos:7  /usr/lib/systemd/systemd    /sbin/init #  容器在遇到问题时尝试重启

当我们在写Dockerfile的时候,也可以这样写

CMD "usr/bin/mysql" # 这样起的一号进程是 /bin/sh -c "/usr/bin/mysqld"
CMD ["usr/bin/mysql"] # 这样起的一号进程是 /usr/bin/mysqld *:3306

当我们以第一种方式启动的容器,stop容器时候,他的第一进程是/bin/sh所以,默认10秒后,应用将被强制杀死,可能会丢失数据
当我们以第二种方式启动的容器,stop容器的时候,应用先进行了关闭,随后才关闭容器,这样就可以"优雅"的关闭容器。

### 配置容器Docker守护进程以允许访问 为了使容器内的Docker守护进程能够被外部访问,需调整其配置以便监听特定网络接口上的端口。默认情况下,Docker守护进程仅绑定到Unix套接字,这意味着只有在同一台机器上的进程才能通过这个套接字与之通信。要改变这一行为,可以通过设置`-H`参数指定额外的TCP地址和端口。 当希望容器内部署的Docker守护进程对外提供服务时,可以在启动容器时传递相应的环境变量或挂载自定义配置文件来实现这一点。具体来说: 对于基于Linux系统的容器,编辑或创建位于`/etc/docker/daemon.json`的JSON格式配置文件[^2], ```json { "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] } ``` 上述配置使得Docker不仅继续监听本地Unix套接字,还会开放所有网卡上的2375端口供外界连接。如果是在生产环境中部署,则建议启用TLS加密并严格限制可访问IP范围以保障安全性[^1]。 另外一种方法是直接在运行容器的时候通过命令行参数指定守护程序的行为: ```bash docker run -d \ --name docker-in-docker \ -p 2375:2375 \ -v /var/run/docker.sock:/var/run/docker.sock \ my_dind_image \ dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 ``` 此脚本展示了如何利用`docker run`指令启动一个新的容器实例,并设置了必要的映射关系以及传入了正确的`dockerd`启动参数。 值得注意的是,在实际应用中应当谨慎考虑安全因素,确保只授权可信源可以触及暴露在外的服务接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

king config

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

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

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

打赏作者

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

抵扣说明:

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

余额充值