외부의 강제 변경 사항이 컨테이너에 전파됩니다.

외부의 강제 변경 사항이 컨테이너에 전파됩니다.

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 구성을 다시 로드해야 합니다.

관련 정보