2016-12-07 10 views
0

Docker 컨테이너 내부에서 해당 컨테이너가 Linux 호스트 또는 Docker Machine에서 기본적으로 실행되는지 여부를 확인할 수있는 방법이 있습니까?Docker 컨테이너가 원래 실행 중이거나 Docker Machine을 사용 중인지 여부를 프로그래밍 방식으로 감지 할 수 있습니까?

질문의 배경 내 톰캣 기반 컨테이너에 JMX를 사용하려는 것입니다,하지만, 나는 호스트의 외부 IP 주소를 알아야합니다

  • 하는 Docker-에서 실행 머신, 이건 192.168.99.100과 비슷합니다.
  • Linux에서 기본적으로 실행되는 호스트의 IP 주소입니다.
  • Mac 용 Docker에서 실행되는 호스트의 IP 주소이기도합니다.

나는 JMX가 활성화 된 상태에서 출시 할 Docker Tomcat 이미지가 있지만 사람들이 기본적으로 Docker-Machine에서 사용하거나 Docker-Machine에서 실행할지 여부를 알지 못하므로 어느 것을 Tomcat을 시작할 때 java.rmi.server.hostname 매개 변수를 제공하는 IP 주소.

(이 실행중인 경우 또는 발견) 중 하나

  • 컨테이너 내부에서 해당 IP 주소를 찾을 수있는 방법이 있나요, 또는
  • 은 외부에서 그것을 찾을 수 있습니다 (예를 들어 고정 표시기-작성에) 그리고 시작시 컨테이너로 전달할 수 있습니까? 이 경우 DOCKER_HOST 환경 변수가 도움이 될 수 있습니까? Docker Machine을 실행하면 tcp://192.168.99.100:2376으로 설정됩니다. Docker Machine을 실행하지 않을 때도이 변수가 사용됩니까?

컨테이너 (또는 Docker Compose)를 시작할 때 수동으로 IP 주소를 제공해야하는 상황을 피하고자합니다.

+1

두 번째 옵션과 관련하여 [docker api] (https://docs.docker.com/engine/reference/api/docker_remote_api/)를 사용하고 컨테이너 정보를 얻을 수 있습니다. –

+0

@ Mohsen89z docker에서 어떤 유형의 호스트를 실행 중인지 알아 보려면 어떻게해야합니까? – Matt

+1

나는 그것을 실행하는 호스트로부터 실행 시간에 환경 변수를 주입하지 않고하기가 어려울 것이라고 생각한다. 사람들을 위해 정보를 수집하는 컨테이너를 실행하는 스크립트를 설정할 수 있습니다. 또는 docker에서 실행되는 [jolokia] (https://jolokia.org)를 시도해보십시오. – Matt

답변

0

여기에 DOCKER_HOST 변수를 사용하여이를 해결 한 방법이 있습니다. 내 가정은이 변수가 설정된 경우 tcp://192.168.99.100:2367 형태로 호스트의 IP 주소를 포함한다는 것입니다. 내 docker-compose.yaml 파일에서

, 내가 용기에 호스트의 DOCKER_HOST 변수를 매핑 한 :

version: "2" 

services: 
    foo: 
    environment: 
     DOCKER_HOST: $DOCKER_HOST 

그런 다음 용기에, 나는 용기가 시작될 때 실행되는 스크립트의 일부로이 변수를 평가하고, DOCKER_HOST 환경 변수가 설정되어 있지 않은 경우, 나는 용기가 예를 들어, 기본적으로 실행되고 있다고 가정

# Allow to specify the JMX port from the outside. Use 10992 as a default if not provided 
DOCKER_JMX_PORT=${DOCKER_JMX_PORT:-10992} 

# Evaluate the $DOCKER_HOST variable 
if [ -n "DOCKER_HOST" ]; then 
    # DOCKER_HOST variable is set 
    DOCKER_JMX_HOST=$(echo "$DOCKER_HOST" | sed -e "s|tcp://||g" -e "s/:.*//g") 
else 
    # DOCKER_HOST variable is not set 
    DOCKER_JMX_HOST=$(hostname) 
fi 

# Set the JMX properties for Tomcat 
export CATALINA_OPTS="-Dcom.sun.management.jmxremote=true \ 
    -Dcom.sun.management.jmxremote.port=$DOCKER_JMX_PORT \ 
    -Dcom.sun.management.jmxremote.rmi.port=$DOCKER_JMX_PORT \ 
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.jmxremote.ssl=false \ 
    -Djava.rmi.server.hostname=$DOCKER_JMX_HOST" 

: 다음 Tomcat의 JMX 속성을 설정하는 데 사용할 Linux에서는 JMX 속성에 호스트 이름을 사용합니다.