2016-08-04 6 views
1

컨테이너를 실제로 시작한 후에 기능을 추가 할 수 있습니까 (예 : NET_ADMIN)?실행중인 도커 컨테이너에 기능을 추가하려면 어떻게해야합니까?

며칠 전에 컨테이너를 시작했으며이 컨테이너에서 제공하는 서비스가 다른 서버에서 원격으로 실행되는 다른 프로세스에 의해 사용되고 있습니다. 루프백 인터페이스를 추가해야하지만 불행히도 --cap-add=NET_ADMIN으로 컨테이너를 시작하는 것을 잊어 버렸기 때문에 지금 인터페이스를 추가 할 수 없습니다.

이 기능을 어떻게 든이 컨테이너에 제공 할 수 있다면 옵션을 찾고 있습니다.

+0

루프백 인터페이스는 네트워크없이 시작하려는 경우에도 기본적으로 컨테이너에 포함됩니다. 당신없이 당신을 시작하기 위해 어떤 옵션을 사용 했습니까? – BMitch

+0

추가적인 루프백 인터페이스를 추가하여 추가 IP 주소를 할당하는 것입니다. – VanagaS

+0

실행중인 컨테이너에 기능을 추가하는 것이 좋습니다. iptables 사용을 시작해야하는 경우에도 필요합니다. – jjmontes

답변

-2

docker exec -it {container_id} /bin/bash을 사용하여 실행중인 컨테이너에서 명령을 실행할 수 있습니다. 명령을 실행할 수있는 bash가 생성됩니다. 일반적으로 이미지의 이식성을 제거하므로 이미지 상태를 수정하는 것이 좋지 않습니다.

2

아니요, 실행중인 컨테이너의 기능을 수정할 수 없습니다. 이는 컨테이너를 처음 만들거나 실행 (그냥 생성 + 시작) 할 때만 정의 할 수 있습니다. 원하는 기능으로 새 컨테이너를 만들어야합니다.

실행중인 컨테이너에 추가 네트워크 인터페이스를 docker network connect으로 할당 할 수 있지만이 기술을 사용하여 문제를 해결하는 데 사용할 수있는 루프백 드라이버는 알지 못합니다.

+0

하드 코딩 된 (액세스 가능한) IP 주소를 사용하여 외부 서비스와 통신하는이 컨테이너 내에 응용 프로그램을 설치했습니다. 이 같은 컨테이너 내에 외부 서비스를 설치했습니다. 루프백 설정은 서비스가 컨테이너 자체 내에서 통신하는지 확인하는 것입니다. – VanagaS

+0

모범 사례는 각 서비스를 별도의 컨테이너에 설치하는 것입니다. 당신은 그들 자신의 도커 네트워크에서 실행할 수 있고,이 네트워크를 실행중인 컨테이너에 연결할 수 있습니다.이 질문과 다른 질문에서 볼 때 애플리케이션 분리 도구가 아닌 컨테이너로 VM을 사용하려고하는 것처럼 들립니다. 이는 컨테이너의 대단히 반 패턴입니다. – BMitch

+0

서비스는 동일한 j2ee 서버 내에서 실행할 수있는 또 다른 war 파일입니다. 나는 불필요하게 다른 이미지를 생성하고 싶지는 않다. – VanagaS

3

VanagaS

1.Stop 컨테이너 :

docker stop yourcontainer; 

2.Get 컨테이너 ID :

docker inspect yourcontainer; 

3.Modify hostconfig.json (기본 고정 표시기 경로의 경우 :/var/lib 디렉토리/도커, 너는 바꿀 수있어)

vim /var/lib/docker/containers/containerid/hostconfig.json 

4. "CapAdd"를 검색하고 null을 [ "NET_ADMIN"]으로 수정하십시오.

....,"VolumesFrom":null,"CapAdd":["NET_ADMIN"],"CapDrop":null,.... 

5. 호스트 컴퓨터의 복구 도커;

service docker restart; 

6. 시작 yourconatiner;

docker start yourcontainer; 

저에게 맞습니다.

관련 문제