정지된 도커 컨테이너/시작되지 않은 도커 컨테이너의 파일을 편집하는 방법
여러 컨테이너로 분할된 응용 프로그램의 오류 및 디버깅 문제를 수정하려고 할 때 컨테이너 내의 파일을 자주 편집합니다.
나는 완전히 게을러서 나노를 설치하고 컨테이너에 직접 편집하거나.
파일을 컨테이너에서 도킹하여 편집하고 다시 복사하여 컨테이너를 재시작합니다.
이는 컨테이너 구축을 위한 새로운 콘텐츠로 넘어가기 전의 중간 단계이며, 위의 작업보다 훨씬 오래 걸립니다(물론 중간 단계이거나 빈둥빈둥빈둥거리고 있습니다).
컨테이너의 시작 프로그램을 자주 중단합니다.이 프로그램은 노드 스크립트와 파이썬 웹 서버 스크립트 중 하나입니다.이 스크립트는 일반적으로 구문 오류로 인해 실패합니다.
그 컨테이너를 구할 방법이 있나요?기동하지 않기 때문에, 이그제큐티브를 도킹 할 수 없기 때문에, 이그제큐티브는 나에게 없어집니다.그런 다음 빌드 입력에서 문제 파일을 수정한 후 rm/rmi/build/run 경로를 진행합니다.
정지된 컨테이너 내의 파일을 편집하거나 정지된 컨테이너 내의 셸을 시작하거나 이 컨테이너를 수정할 수 있는 방법을 알려주세요.
(리모트 컴퓨터에서 작업하여 네트워크 구성을 파괴하는 것처럼 보입니다.이렇게 하면 접속이 "영원히" 끊겨 버리기 때문에 폴백을 사용할 필요가 있습니다).
호스트에서 도커 컨테이너 파일을 편집하는 방법관련이 있는 것처럼 보이지만 구식입니다.
잘못된 설정 변경으로 인해 컨테이너가 부팅되지 않는 문제가 있었습니다.정지된 컨테이너에서 파일을 복사하여 편집할 수 있었습니다.예를 들어 다음과 같습니다.
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
여기서 args를 "nodejs app.js"에서 "/bin/bash"로 변경할 수 있습니다.도커 서비스를 재기동해, 컨테이너를 기동합니다(이 시점에서 올바르게 기동하는 것을 확인할 수 있습니다).를 사용해 주세요.
docker start -i (containername)
즉시 그만두지 않도록 하기 위해서입니다.이제 컨테이너 작업 및/또는 나중에 다음을 사용하여 연결할 수 있습니다.
docker exec -ti (containername) /bin/bash
또한 도커 cp는 컨테이너 외부에서 편집된 파일을 복사할 때 유용합니다.
또한 컨테이너가 다소 '분실'된 경우에만 이러한 조치를 취할 수 있으므로 어떠한 변경도 개선될 것입니다.
컨테이너 파일 시스템을 직접 편집할 수는 있지만, 좋은 생각인지는 모르겠습니다.먼저 컨테이너의 런타임 루트로 사용되는 디렉토리의 경로를 찾아야 합니다. 실행합니다.docker container inspect id/name
.UpperDir
JSON 출력에 표시됩니다.
전화번호부입니다.
정지된 컨테이너를 재시작하려고 하는데 잘못된 구성으로 인해 컨테이너를 변경해야 하는 경우 "docker cp" 명령을 사용하여 다음 작업을 수행할 수 있습니다(이전 제안과 유사).이 절차를 통해 파일을 제거하고 필요한 기타 변경을 수행할 수 있습니다.운이 좋으면 당신은 아래의 많은 단계를 건너뛸 수 있습니다.
- 도커 검사를 사용하여 진입점을 찾습니다(일부 버전에서는 경로라고 함).
- 도커 실행을 사용하여 의 클론을 만듭니다.
- docker exec -ti bash를 사용하여 클론 입력(*nix 컨테이너인 경우)
- 찾을 복제본을 검색하여 진입점 파일 위치를 찾습니다.
- 도커 cp : ./ 를 사용하여 오래된 엔트리 포인트스크립트를 복사합니다.
예를 들어 새 진입점 스크립트 수정 또는 생성
#!/bin/bash tail -f /etc/hosts
- 스크립트에 실행 권한이 있는지 확인
- 도커 cp ./ 를 사용하여 오래된 엔트리 포인트를 교환합니다.
- start를 사용하여 오래된 컨테이너를 기동합니다.
- 스텝 6~9를 시작할 때까지 다시 실행합니다.
- 컨테이너 문제 해결
- 필요에 따라 엔트리 포인트를 복원하고 필요에 따라 스텝6 ~ 9를 재실행합니다.
- 필요에 따라 클론 삭제
언급URL : https://stackoverflow.com/questions/32750748/how-to-edit-files-in-stopped-not-starting-docker-container
'programing' 카테고리의 다른 글
Bash: 무한 절전(무한 차단) (0) | 2023.04.12 |
---|---|
Git을 사용하여 한 브랜치에 있는 모든 커밋을 표시하지만 다른 브랜치에는 표시 안 함 (0) | 2023.04.12 |
Enter 키를 누르지 않으면 Excel 값이 업데이트되지 않습니다. (0) | 2023.04.12 |
함수 호출에서 **(이중 별/별표) 및 *(별/별표)는 무엇을 의미합니까? (0) | 2023.04.12 |
심볼 링크가 있는지 확인하는 방법 (0) | 2023.04.12 |