2017-12-06 13 views
0

私は私のコンテナの起動などのWebサーバーに組み込まれた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がそのままコマンド全体をフィードする場合、バックティックはシェルによってサブコマンドとして解析されると考えられます。 – bluearth

答えて

3

アップドッキングウィンドウ-構成です。シェルがコンテナ内のバッククォートを解析するようにするには、シェルでコマンドを実行する必要があります。 pid 1のシェルはSIGTERMを傍受し無視します(シェルを終了させたくないシングルユーザモードであると仮定しているため)。コマンドの文字列構文はシェルを実行するか、コマンドを変更して明示的にシェルを起動することができます。これらのいずれかが動作するはずです:

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

これは、最初の行が私の特定の問題を解決することを基にしてこれを上書きしました。コンテナ内の(デフォルトの)シェルはbashではないので、適切にバックティックを解析することはできません。私が使用している画像は高山に基づいていました。 – bluearth

+0

@bluearth dockerのデフォルトシェルは、画像が明示的にそれを上書きしない限り、常に/ bin/shです。これはアルパイン画像の誤りです。 https://docs.docker.com/engine/reference/builder/#shell – BMitch

関連する問題