0

私はサーバー管理者ではなく、ポートや ssh などのサーバー関連の問題に直面することがよくあります。私が今直面している問題は、ホームステッドとドッカーにあります。

ホームステッドで実行されているlaravelアプリケーションがあります。しかし今では、自分のアプリケーションから API を呼び出してデータを使用できるように、ホームステッドでもProcess Makerを実行する必要もあります。そのため、Mac で適切に動作する Docker イメージを見つけeltercera/docker-processmakerて API をテストしたところ、正常に動作しています。

次のコマンドでイメージを実行します。

docker run -d -e "HTTPD_SERVER_ADMIN=rohan0793@gmail.com" -p 80:80 --name some-pkm eltercera/docker-processmaker/

そして、それはうまくいきます。しかし、ホームステッド マシンに docker-engine をインストールして同じことを試してみると、次のエラーが発生しました。

docker: Error response from daemon: driver failed programming external connectivity on endpoint some-pkm (dee715e3d7bf47d48f6fbb4a8ba1418009b1a811ef043e18fb232132ec3b6a2d): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

それは言い0.0.0.0:80: bind: address is already in useます。これが何を意味するのか、これを解決してホームステッド マシン内でアプリケーションを使用する方法がわかりません。これは何らかの形でポート転送に関連していますか? -pasを使用してマシンを実行できますが、90:90どのようにアクセスするのかわかりません。

ここで何が欠けているのか、先に進む前に何を学ぶ必要があるのか​​を誰かが説明してくれますか?

編集

私は試した:

docker run -d -e "HTTPD_SERVER_ADMIN=rohan0793@gmail.com" -p 90:80 -h processmaker.app --name some-pkm eltercera/docker-processmaker/

Macでファイルを編集したところ、ブラウザで編集/etc/hostsできるようになり、機能しました。processmaker.app:90しかし、これはヒットアンドトライのようなものでした。どうやって解決したのか、いまだにわかりません。

4

1 に答える 1

2

と言って解決しました-p 90:80

これにより、Docker コンテナー (Web サーバーがコンテナー内でリッスンするポート) の内部ポート 80 が、ホスト コンピューターのポート 90 として公開されます (http://processmaker.app:90ブラウザーでアクセスできるようになります)。

この便利な機能 (Docker-controller 仮想ネットワーク スタック) により、アプリケーションはデフォルト ポートを使用でき、それを「実際の」ネットワーク上の空きポートにマップできます。ポートを他のコンテナーにのみ公開し、外部にはまったく公開しないなど、より複雑なことも実行できます。

-p 80:80うまくいかなかった理由は、「実際の」ポート 80 がすでに使用されていたためです。

-p 90:90機能しなかった理由は、コンテナー アプリケーションが仮想ポート 80 でリッスンし、ポート 90 を公開しても何も役に立たない (コンテナー内で何も接続されていない) ためです。

ポート 80 の代わりにポート 90 でリッスンするようにコンテナー化された Web サーバーを再構成することで機能させることができ-p 90:90ます。これは、コンテナー化されていないアプリケーションで行うことですが、Docker を使用すると、デフォルト設定 (ポート、ファイル システム) ですべてを実行できます。パスなど) を作成し、コンテナーを開始するときに、アプリケーションの外部で物事を結び付けます (これを派手な言葉で表すと、オーケストレーション)。

于 2016-09-29T08:09:28.100 に答える