2016-08-30 8 views
1

도커 컨테이너 안에있는 구성 파일을 변경하려고합니다.도커 컨테이너에 sed 명령 실행

docker exec container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini 

로컬로이 sed 명령을 실행해도 문제가 없지만 컨테이너에서 실행하려고하면 다음 오류 메시지가 나타납니다.

sed: cannot rename tmp/config.ini: Operation not permitted 

은 내가해야 할 것은 'config.ini 파일'에서 'URL_BASE ='을 대체 전에 내 서버에 컨테이너를 배치합니다.

sed 명령이 파일 이름 바꾸기를 시도하는 이유를 모르겠습니다.

아이디어가 있으십니까?

나는 내가 --privileged 플래그를 실행하려고

을 시도했지만 작동하지 않았다 무엇. chmod를 사용하여 파일 사용 권한을 변경하려고했으나 같은 이유로 허가를받을 수 없었습니다.

docker exec --privileged container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini 

Result: sed: cannot rename tmp/config.ini: Operation not permitted 

chmod를

docker exec --privileged container_name chmod 755 tmp/config.ini 

Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted 
나는 또한 고정 표시기 전에 sudo를 함께 실행하지만 중 하나가 작동하지 않았다 시도

.

+0

문자열을 바꿀 올바른 명령입니까? 'docker run -it bash'를 실행 한 다음'sed <...>' – n2o

+0

을 실행하면 파일의 복사본을 생성 한 다음 원본으로 대체하여 작동합니다. 문제는 관리자 권한으로 컨테이너 내부에 파일을 만들었지 만 나중에 다른 사용자로 이동했기 때문입니다. 따라서 exec를 수행 할 때마다 관리자가 아닌 사용자로 해당 명령을 입력하게됩니다. Dockerfile을 보여주세요. 'docker exec container_name whoami'와'docker exec container_name ls -l tmp/config.ini'를 입력하면이를 확인할 수 있습니다. –

답변

1

Nehal이 절대적으로 적합하므로 sed는 로컬 파일을 작성하므로 Linux에서 일반적으로 사용되는 다른 접근 방식이 필요합니다. heredocs.

설명서의 첫 번째 줄을 사용하면 여기 문서가 특수 용도 코드 블록입니다. 대화 형 프로그램에 명령 목록을 제공하기 위해 I/O 리디렉션 형식을 사용합니다. 이 의사 TTY 할당하기 때문에,

docker exec -i container_name bash <<EOF 
sed -ire '/URL_BASE = /c\api.myapiurl' /tmp/config.ini 
grep URL_BASE /tmp/config.ini 
# any other command you like 
EOF 

일반적으로 실행 bash는 사용되는 -t의주의, 우리는 정말 안 :

그것은 다음과 같은 고정 표시기 간부와 함께 우리를 도울 수 그것을 필요로합니다. 또한 안전을 위해 항상 절대 경로 (예 : /tmp/config.ini)를 사용하십시오.

관련 문제