도커 컨테이너의 실행 명령을 표시하는 방법
저는 도커 컨테이너 설정을 위해 타사 GUI(Synology Docker Package)를 사용합니다.그러나 그 한계로 인해 명령줄에서 컨테이너를 실행해야 합니다.(포트를 바인딩할 다른 호스트 IP를 매핑합니다.)
이제 이미 수행된 설정이 많기 때문에 이 컨테이너를 시작하는 원래의 run 명령을 검색하고 포트 매핑 포트를 새 것으로 변경할 수 있습니다."docker run -p 80:8080 gitlab
"
방법을 찾을 수 없습니다. 이벤트 사용 "docker inspect", 그런 정보는 제공되지 않습니다.
이 문제를 해결하기 위한 조언을 부탁드립니다.
그럼 엔지니어링 도커 실행 명령을 되돌리는 방법은?
명령을 . 은 을 가 은 하지 은 가 하지 0.1.2
. 업데이트하려면 이를 따라야 합니다.언젠가는 이를 이용해 올바른 실행 명령을 얻을 수도 있을 것입니다.
$ sudo pip install runlike
# run the ubuntu image
$ docker run -ti ubuntu bash
$ docker ps -a
# suppose you get the container ID 1dfff2ba0226
# Run runlike to get the docker run command.
$ runlike 1dfff2ba0226
docker run --name=elated_cray -t ubuntu bash
Github 저장소: runlike
업데이트:
설치하지 않고 실행(Thanks @tilo)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro \
assaflavie/runlike YOUR-CONTAINER
아니면 가명을 설정해서 쉘의 프로파일에 넣거나
alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro assaflavie/runlike"
docker ps
runlike YOUR-CONTAINER
더 간단한(?) 대안은 내장된 Go 템플릿 기능을 사용하여 다음을 출력하는 이 도커 검사 템플릿을 실행하는 것입니다.docker run
호환되는 명령어입니다.템플릿은 가장 일반적인 명령줄 옵션만 포함하지만 쉽게 확장할 수 있습니다.
이 솔루션은 도커 자체를 제외하고는 다른 툴에 의존하지 않습니다.
docker inspect \
--format "$(curl -s https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl)" \
name_or_id_of_your_running_container
도커 검사 사용:
$ docker inspect foo/bar
[
{
# …
"Config": {
# …
"Cmd": [
"/usr/local/bin/script.sh"
],
# …
}
}
]
jq를 사용하여 프로그래밍 방식으로 구문 분석할 수 있습니다.
$ docker inspect foo/bar | jq -r '.[0]["Config"]["Cmd"][0]'
/usr/local/bin/script.sh
Node 하여 Δ CLI Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ 를 하였습니다.docker run
기존 컨테이너의 명령입니다.
https://www.npmjs.com/package/rekcod
예는 다음과 같습니다.
$ npm i -g rekcod
$ rekcod redis_container
docker run -d --name redis_container --restart always -h a44159e148e1 \
--expose 6379/tcp -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
-e REDIS_VERSION=3.0.7 -e REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz \
-e REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c \
--entrypoint "/entrypoint.sh" redis "redis-server"
또한 링크와 마운트된 볼륨 및 기타 작업도 처리합니다.
현재로서는 매우 견고하지는 않지만, 언급된 다른 것들보다 더 많은 것을 처리할 수 있습니다. 그리고 그것은 제가 찾고 있던 것 중의 하나였습니다.
EDIT: 소프트웨어를 설치하지 않고 하나의 명령으로:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod redis_container
다음 명령을 사용하여 모든 컨테이너에 대한 인수를 가져옵니다.
docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $(docker ps -a -q)
현재는 'docker inspect'로 이동한 다음 run 명령을 수동으로 재생성해야 하는 것 같습니다.
이 작업을 위해 bash 스크립트를 작성하려고 시도하는 사람을 발견했습니다. https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89
하지만 그것은 불완전하고 jq에 의존합니다.
현재 실행 중인 도커 서버 설정에 설치하지 않으려면 간단히 실행(바꾸기)할 수 있습니다.$CONTAINER_NAME
run 인수를 사용할 컨테이너 이름:
docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache nodejs nodejs-npm && npm i -g rekcod && rekcod $CONTAINER_NAME"
(메소드의 경우)
아니면
docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache py-pip && pip install runlike && runlike $CONTAINER_NAME"
(메소드의 경우)
더 간단한 (강력한) 옵션은 bash-preexec과 같은 것을 사용하여 "docker run"으로 시작하는 명령을 캡처하는 것입니다.그런 다음 이러한 명령을 어딘가에 저장했다가 나중에 검색할 수 있습니다.
예를 들어 bash 프로필에 다음과 같은 내용을 추가할 수 있습니다.
[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh
docker_run_history=~/.docker_run_history
docker_clear_history(){
echo -n > $docker_run_history
}
docker_search_history(){
search_for="$@"
[[ -z $search_for ]] && search_for=".*"
\cat $docker_run_history | grep "$search_for" | tail -1
}
docker_ps_mod(){
for c in $(docker ps --format "{{.Image}}"); do
echo "Container $c was run using:"
echo -e "\t$(docker_search_history $c)"
done
}
docker_hook(){
if [[ $@ =~ ^"docker run".*$ ]]; then
\echo "$@" >> $docker_run_history
fi
}
preexec(){
docker_hook $@
}
그러면 당신은 당신의 물건들을 실행할 수 있습니다.
source ~/.bash_profile
docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
docker run -d daemon
docker_ps_mod
출력되는 항목:
Container image was run using:
docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
Container daemon was run using:
docker run -d daemon
도커 실행 명령은 도커 파일이나 다른 도커 관련 문서에 지정되어 있지 않습니다.
컨테이너와 관련된 문서에서 예를 찾거나, (적어도 명령 및 포트 매핑의 경우) 도커가 실행된다는 것을 추론할 수 있습니다.docker ps -a
(그렇다고 네게 가능성은 없겠지만)--volumes-from
옵션)
체크도/usr/syno/etc/packages/Docker-GitLab/config
이것은 Synology에서 사용할 수 있는 gitlab 구성 자체와는 다릅니다./usr/syno/etc/packages/Docker/synology_gitlab.config
도커 실행 명령을 되돌리기 위해 다음 npm 패키지도 있습니다.
https://github.com/nexdrew/rekcod
@Chris_Lamb에서 언급한 바와 같이 도커 검사를 사용하여 이와 같은 내용을 확인할 수 있습니다.파이썬 사전에 이 정보를 로드하는 방법은 다음과 같습니다.
import subprocess,json
im_inspect = subprocess.check_output(["docker", "image", "inspect", "datalab-nginx-ui"])
# print(im_inspect.decode("utf-8") ) #if you want to print it
d_inspect = json.loads(im_inspect)
d_inspect
d_inspect[-1]['ContainerConfig']['Cmd']
예제 실행:
모든 도커 파일이 여기에 있습니다. 예를 들어 cmd와 마운트를 찾을 수 있습니다.ls -la /proc/1
그냥 까불지 마!
cat /proc/1/cmdline
nginx: master process nginx -g daemon off;
대부분의 답변이 모든 상황에서 어떻게 제3자에게 의존하는지 궁금합니다.docker inspect
JSON. 그럴 필요도 없어요.jq
부터docker
JSON 포맷 옵션이 있습니다.
사용하다
docker inspect -f 'docker run --name {{.Name}} -v {{join .HostConfig.Binds " "}} -p {{.HostConfig.PortBindings}} {{.Config.Image}} {{join .Config.Cmd " "}}' my-osrm-image
예: 실제 bash 명령어의 경우
docker run -t -i --name my-osrm-image -v "/custom/path/to/data-osrm:/data" -p 80:5000 osrm/osrm-backend osrm-routed --algorithm mld /data/europe-latest.osrm
위의docker inspect
명령이 출력됩니다.
docker run --name /my-osrm-image -v /custom/path/to/data-osrm:/data -p map[5000/tcp:[{ 80}]] osrm/osrm-backend osrm-routed --algorithm mld /data/europe-latest.osrm
약간의 청소가 필요하지만 모든 것이 거기에 있고, 그에 따라 추가 옵션을 포함하도록 확장할 수 있습니다.docker inspect
JSON 출력.출력 형식에 대해서는 이 설명서도 참조하십시오.
언급URL : https://stackoverflow.com/questions/32758793/how-to-show-the-run-command-of-a-docker-container
'programing' 카테고리의 다른 글
오류 [ERR_REQUIR_ESM]: ES 모듈의 require()가 지원되지 않습니다. (0) | 2023.09.09 |
---|---|
python mysql /mariaDB 데이터베이스 오류 (2013년, '쿼리 중 MySQL 서버와의 연결 끊김') (0) | 2023.09.09 |
집합에 값 배열을 추가하는 방법 (0) | 2023.09.09 |
일부 점을 클릭하여 정보를 긁어낼 수 없음 (0) | 2023.09.09 |
Oracle 10g을 사용한 후속 잠금에 대한 동면 경고 (0) | 2023.09.09 |