docker가 exec를 실행할 때 발생하는 오류에 대한 해결 방법: 1. 스크립트의 첫 번째 줄을 "/bin/bash"로 바꿉니다. 2. "docker exec -d service_name /bin/bash -c '/opt/start.sh를 실행합니다. '".
이 문서의 운영 환경: centos7 시스템, Docker 버전 20.10.11, Dell G3 컴퓨터.
Docker exec가 스크립트 솔루션을 실행하지 못했습니다
배경 소개
Docker 컨테이너에 사용할 때 백그라운드에서 실행해야 하는 스크립트가 있는데, docker exec를 통해 호출됩니다. 이 스크립트는 내가 원하는 결과를 얻지 못했기 때문에 탐색을 시작했습니다!
원본 스크립트
docker exec -it service_name /bin/bash -c '/opt/start.sh'
이 start.sh의 기능은 백그라운드에서 두 개의 서비스를 시작하는 것입니다
#!/bash nohup start1.sh > start1.log 2>&1 & sleep 5 nohup start2.sh 2>&1 & echo 'server started'
문제 위치
1 스크립트 작성이 표준화되지 않았습니다
Docker를 볼 수 있습니다. 위 명령 시작 시 사용된 공식은 /bin/bash
이고 스크립트에 지정된 공식은 실제로 /bash
입니다. 쉘 스크립트 인터프리터에 대한 경로를 지정하며, 이 지정된 경로는 파일의 첫 번째 줄에만 배치될 수 있습니다. 따라서 동일한 인터프리터를 사용하도록 스크립트의 첫 번째 줄을 /bin/bash
로 바꿔야 합니다/bin/bash
而脚本中指定的确实/bash
.我们都知道脚本第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。因此需要把脚本中的第一行用/bin/bash
替换了,使得它们用同一个解释器
2.启动参数有问题
docker exec 执行的过程中使用了-it
-it
매개변수를 사용하면 -t를 통해 docker가 의사 터미널을 할당하고 이를 컨테이너의 표준 입력에 바인딩할 수 있습니다.
-i는 컨테이너의 표준 입력을 열린 상태로 유지합니다.
도움말에 -d가 있습니다. , 백그라운드 클라우드 실행 스크립트, 이는 우리의 요구 사항을 충족합니다
수정 프로세스docker exec -d service_name /bin/bash -c '/opt/start.sh'
#!/bin/bash nohup start1.sh > start1.log 2>&1 & sleep 5 nohup start2.sh 2>&1 & echo 'server started'
위 내용은 docker가 exec 오류를 실행하는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!