Docker 컨테이너를 중지 / 시작하지 않는 파일을 편집하는 방법
여러 컨테이너로 분할 된 내 애플리케이션의 오류를 수정하고 문제를 디버깅하려고 시도하면서 컨테이너의 파일을 자주 편집합니다.
나는 완전히 게으르고 nano를 설치하고 컨테이너에서 직접 편집하거나
컨테이너에서 파일을 Docker cp, 편집, 다시 복사하고 컨테이너를 다시 시작합니다.
이는 컨테이너 빌드를위한 새로운 콘텐츠를 만들기 전의 중간 단계이며, 위의 작업을 수행하는 것보다 훨씬 오래 걸립니다 (물론 중급 / 조작에 불과합니다).
이제는 컨테이너의 시작 프로그램을 자주 중단합니다. 중단되는 경우에는 노드 스크립트 또는 Python 웹 서버 스크립트가 일반적으로 구문 오류로 인해 실패합니다.
컨테이너를 저장할 방법이 있습니까? 그들이 시작하지 않기 때문에 나는 그들에게 도커 exec를 할 수 없으므로 그들은 나에게 잃어 버립니다. 그런 다음 빌드 입력에서 문제가되는 파일을 수정 한 후 rm / rmi / build / run 경로로 이동합니다.
중지 된 컨테이너에서 파일을 편집하거나 중지 된 컨테이너에서 cp 또는 셸을 시작하려면 어떻게해야합니까?
(원격 컴퓨터에서 작업하고 네트워킹 구성을 깨는 것과 비슷해 보입니다. 연결이 "영원히"끊어지고있는 경우 대체를 사용해야합니다.)
호스트에서 Docker 컨테이너 파일을 편집하는 방법은 무엇입니까? 관련성이 있지만 구식입니다.
잘못된 구성 변경으로 인해 시작되지 않는 컨테이너에 문제가 있습니다. 중지 된 컨테이너에서 파일을 복사하여 편집 할 수있었습니다. 같은 것 :
docker cp docker_web_1:/etc/apache2/sites-enabled/apache2.conf .
(파일 수정)
docker cp apache.conf docker_web_1:/etc/apache2/sites-enabled/apache2.conf
내 질문에 답하기 .. 더 많은 지식을 가진 사람으로부터 더 나은 답을 기대하고 있습니다 !!
두 가지 가능성이 있습니다.
1) 호스트에서 직접 파일 시스템 편집 . 이것은 다소 위험하며 컨테이너를 완전히 깨뜨릴 가능성이 있으며, 잘못된 것에 따라 다른 데이터가있을 수 있습니다.
2) 시작 스크립트 를 bash 시작, 수정 / 편집을 수행 한 다음 시작 프로그램을 원하는 것으로 다시 변경하는 것과 같이 실패하지 않는 것으로 변경합니다 (예 : 노드 또는 이전에 있었던 것).
자세한 내용은:
1) 사용
docker ps
실행중인 컨테이너를 찾거나
docker ps -a
모든 컨테이너 (중지 된 컨테이너 포함)를 찾고
docker inspect (containername)
첫 번째 값 중 하나 인 "Id"를 찾으십시오.
이것은 구현 세부 사항을 포함하고 변경 될 수있는 부분입니다. 이런 식으로 컨테이너를 잃을 수 있습니다.
이동
/var/lib/docker/aufs/diff/9bc343a9..(long container id)/
컨테이너가 기반으로하는 이미지로 변경된 모든 파일을 찾을 수 있습니다. 파일을 덮어 쓰거나 파일을 추가 또는 편집 할 수 있습니다.
다시 말하지만 나는 이것을 권장하지 않습니다.
2) https://stackoverflow.com/a/32353134/586754에 설명 된대로 다음 과 같은 경로에서 구성 json config.json을 찾을 수 있습니다.
/var/lib/docker/containers/9bc343a99..(long container id)/config.json
여기에서 "nodejs app.js"에서 "/ bin / bash"로 인수를 변경할 수 있습니다. 이제 docker 서비스를 다시 시작하고 컨테이너를 시작합니다 (이제 올바르게 시작되는지 확인해야 함). 당신은 사용해야합니다
docker start -i (containername)
즉시 종료되지 않도록합니다. 이제 컨테이너로 작업하거나 나중에 연결할 수 있습니다.
docker exec -ti (containername) /bin/bash
또한 docker cp는 컨테이너 외부에서 편집 된 파일을 복사하는 데 유용합니다.
또한 컨테이너가 다소 "분실"된 경우에만 해당 조치로 돌아 가야하므로 변경 사항이 개선 될 것입니다.
컨테이너 파일 시스템을 직접 편집 할 수 있지만 좋은 생각인지 모르겠습니다. 먼저 컨테이너의 런타임 루트로 사용되는 디렉토리 경로를 찾아야합니다. 을 실행 docker container inspect id/name
합니다. UpperDir
JSON 출력 에서 키 를 찾습니다 .
그것이 당신의 디렉토리입니다.
'Programing' 카테고리의 다른 글
동일한 클래스의 다른 버전에 대한 플레이버 빌드 (0) | 2020.12.01 |
---|---|
Travis-CI를 구성하여 풀 리퀘스트를 빌드하고 중복없이 마스터에 병합하는 방법 (0) | 2020.12.01 |
웹 사이트 API의 표준은 무엇입니까? (0) | 2020.12.01 |
DateTime.ToUniversalTime ()은 어떻게 작동합니까? (0) | 2020.12.01 |
SQL 조인 테이블 명명 규칙 (0) | 2020.12.01 |