![来自外部的力变化传播到容器中](https://linux22.com/image/167226/%E6%9D%A5%E8%87%AA%E5%A4%96%E9%83%A8%E7%9A%84%E5%8A%9B%E5%8F%98%E5%8C%96%E4%BC%A0%E6%92%AD%E5%88%B0%E5%AE%B9%E5%99%A8%E4%B8%AD.png)
我有一个基于 Docker 容器gitlab-ce/latest
图像。为了在微创的同时允许使用 Ansible 进行某些额外操作,我选择绑定安装默认情况下/assets/sshd_config
容器附带的。我本来可以选择复制或docker compose
,但我最终这样做了。
结果安装如下(docker inspect
摘录):
"Mounts": [
{
"Type": "bind",
"Source": "/srv/gitlab/sshd_config",
"Target": "/assets/sshd_config",
"ReadOnly": true,
"BindOptions": {
"Propagation": "shared"
}
}
],
现在我注意到,除非重新启动容器,否则在主机端 ( ) 上对文件所做的更改/srv/gitlab/sshd_config
不会反映在容器 ( ) 内。/assets/sshd_config
有没有一种方法可以使主机端的更改在容器内立即可见,而无需进行大量更改或不必进行重新开始容器?
答案1
绑定安装应该是展示在容器内部,但是 sshd 在重新启动之前不会读取新配置。
第 1 步 - 获取容器名称
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1605793904b gitlab/gitlab-ce "/assets/wrapper" About a minute ago Up About a minute (health: starting) 22/tcp, 80/tcp, 443/tcp elastic_austin
在这种情况下,我的容器被命名为“elastic_austin”
步骤 2(可选)- 确定您修改的文件是否存在
您可以通过容器内的 bash 检查您的更改是否存在docker exec
$ docker exec -it elastic_austin bash
root@b1605793904b:/# tail /etc/ssh/sshd_config
[...your sshd_config here...]
希望你的改变应该在那里。
第 3 步 - 重新启动 SSH 守护进程
现在我们知道更改发生在容器内,您需要重新启动容器内的 sshd 服务。
您可以service ssh restart
从容器内的 bash 运行,也可以docker exec
从主机运行。
$ docker exec -it elastic_austin service ssh restart
* Restarting OpenBSD Secure Shell server sshd [ OK ]
这应该会强制容器重新加载更新的 ssh 配置。