質問: ### Dokcerで別コンテナのPHPコマンドを実行したい Go言語がインストールしてあるコンテナ内のプログラムでphpがインストールしてあるコンテナのphpコマンドを叩きたいのですが、phpコンテナの参照の仕方がわかりません。 ご存知の方がいらっしゃいましたら、ご教示頂けますと幸いです。 よろしくお願いいたします。 ### 発生している問題・エラーメッセージ ``` エラー: exec: "php": executable file not found in $PATH ``` ### 該当のソースコード ``` out, err := exec.Command("php","-v").Output() if err != nil { fmt.Println("エラー: ", err) } fmt.Println("成功: ", out) ```
回答: 前提を確認させてください。 1. PHPを実行するコンテナAがある 2. Go言語環境のコンテナBがある 3. コンテナBから、コンテナAの中にあるPHPを実行したい。 このような場合、コンテナAとコンテナBはプロセスID空間やファイルシステムが異なりますので、コンテナから別のコンテナに対してコマンド実行はできません。 ただ、このコンテナB実行時に、ホスト側の`/var/run/docker.sock`をコンテナBのボリュームとしてマウントするとコンテナAを操作できます。 例えば `docker run -it -v /var/run/docker.sock:/var/run/docker.sock:/var/run/docker.sock docker /bin/sh` コマンドを実行してコンテナを起動するとします。 このコンテナは `docker` イメージを使っていて(dockerコマンドを実行したいからです)、ホスト側の `/var/run/docker.sock` がコンテナ内からも見えています。 この状態で、 `docker exec -it <コンテナA> php foo bar` とするとコマンドを実行できます。 一方で、セキュリティ上好ましくない場合もあります。事実上、ホスト上の全てのファイルにアクセスしたり、実行できます。リスクはありますが、必要があれば注意してご利用ください。