반응형

Host OS: Ubuntu 16.04 (amd64)

lxc version: 2.0.4


Linux Container에 외부(즉 Host)에서 명령어를 주입하는 방법은 Container 시작할 때 명령어 같이 실행하는 방법과 이미 실행중일 때 명령어를 실행하는 방법으로 나뉜다.


일단 시작하지 않은(stop 또는 lxc-create만 해둔 상태) container는 lxc-start 또는 lxc-execute를 통해서 특정 명령어를 같이 실행할 수 있다.


# lxc-execute -n 컨테이너_이름 -- 실행할_명령어


그런데 이미 실행중인 container에 대해서 lxc-execute를 하면 이미 실행중이라는 에러가 나면서 실행되지 않는다. 이 때에는 lxc-attach를 쓰면 된다.


# lxc-attach -n 컨테이너_이름 -- 실행할_명령어


lxc-attach를 추가 명령어 없이 실행하면 해당 노드의 프롬프트로 바뀌어 버리는데, 실행할 명령어를 추가하게 되면 container의 프롬프트로 바뀌지 않은 채 명령어만 실행하고 Host의 쉘을 유지하게 된다. 이렇게 함으로써 host가 여러 개의 container에 대해서 같은 명령어를 일괄 실행할 수 있는 장점이 있다.


예를 들어, node4라는 이름의 container에 default route를 추가하는 명령어를 실행한 결과가 아래 그림과 같다. 원래 실행중인 container에 없던 default 경로가, lxc-attach와 함께 실행하는 route 명령어를 통해서 새로 추가되었음을 확인할 수 있다. 그리고 프롬프트가 바뀌지 않는 것도 확인할 수 있다.



다만 프롬프트만 바뀌지 않을 뿐, 실행 결과에 대한 출력은 host의 쉘에 모두 표시되므로 에러 여부도 판별할 수 있다.



<참고자료>

[1] "9.6 Starting a Command Inside a Running Container",

 https://docs.oracle.com/cd/E37670_01/E37355/html/ol_attach_containers.html



반응형
블로그 이미지

Bryan_

,