2017-12-06 6 views
0

나는 내 컨테이너 시작으로 웹 서버에 내장 된 PHP를 실행하려고 합니다만, 최대 고정 표시기-구성 불평 ​​(역 인용 부호를? 역 따옴표?) 내 고정 표시기 - compose.yml에docker-compose.yml 파일에서 백틱을 이스케이프하는 방법은 무엇입니까? 그것은 '기호를 구문 분석하는 데 실패

여기 내 고정 표시기 - compose.yml

version: "3" 
services: 
    sf-api: 
    image: reston/php:7.1 
    ports: 
     - "8000:8000" 
    volumes: 
     - ".:/tmp/target" 
    working_dir: "/tmp/target" 
    command: ["php","-S","`hostname -i`:8000"] 

난 할 노력하고있어하는 웹 서버가 용기 외부 IP 대신 127.0.0.1에 결합하는 것입니다이다.

편집 : 다음은 실행 출력이 명시 적 명령에 대한 JSON 간부 구문 쉘 내부 명령을 실행하지 않도록 고정 표시기-작성했다

$ docker-compose up 
Recreating storefrontapi_sf-api_1 ... 
Recreating storefrontapi_sf-api_1 ... done 
Attaching to storefrontapi_sf-api_1 
sf-api_1 | Invalid address: `hostname -i` 
storefrontapi_sf-api_1 exited with code 1 
+0

당신은 정확한 오류 메시지 – yamenk

+1

부두 노동자의 작성이 역음을 구문 분석하지 않았다 제공 할 수 있습니다, 로그 및 오류 앱에서입니다. 명령이 주인이나 컨테이너 내부에서 어디에서 실행되기를 기대합니까? – BMitch

+0

@BMitch 컨테이너 내부에서 명령을 실행하려고합니다. compose가 전체 명령을 그대로 제공하면, backtick은 쉘에 의해 서브 명령으로 해석된다고 가정합니다. – bluearth

답변

3

까지 고정 표시기-구성입니다. 셸에서 컨테이너 내부의 역 따옴표를 구문 분석하려면 셸을 사용하여 명령을 실행해야합니다. 이것은 pid 1의 쉘이 SIGTERM을 가로 채고 무시할 것이기 때문에 신호 처리와 같은 것을 깨뜨릴 것입니다 (쉘을 종료하지 않으려는 단일 사용자 모드에 있다고 가정 함). 명령의. 자열 구문은 쉘을 실행하거나 명령을 변경하여 쉘을 명시 적으로 시작하도록 할 수 있습니다. 이 중 하나가 작동합니다 :

command: ["/bin/sh", "-c", "php -S `hostname -i`:8000"] 
command: "php -S `hostname -i`:8000" 
+0

첫 번째 줄이 내 특정 문제를 해결한다는 것을 기초로 Upvoted. 컨테이너 내부의 (기본) 셸이 배쉬가 아니기 때문에 백틱을 제대로 파싱 할 수 없습니다. 내가 사용하고있는 이미지는 알파인을 기반으로했다. – bluearth

+0

@bluearth docker의 기본 쉘은 이미지가 명시 적으로 무시하지 않는 한 항상/bin/sh입니다. 이는 알파인 이미지의 실수 일 것입니다. https://docs.docker.com/engine/reference/builder/#shell – BMitch