来自外部的力变化传播到容器中

来自外部的力变化传播到容器中

我有一个基于 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 配置。

相关内容