2016-05-25 6 views
2

簡単なドッカー作成設定を作成したいと思います。私はJSで実装された静的なフロントエンドをnginxが提供しています - これは1つのコンテナです。私はまた、APIバックエンドWebサーバーを持っています - 別のコンテナ。ドッカーはホストの観点からバックエンドのIPを使って設定フロントエンドを設定します

通常のポート転送で両方のコンテナを個別に実行し、ホストマシン(Mac OS X)からdocker-machine ipで指定されたIP経由でアクセスできます。問題はフロントエンドが静的コンテンツを正しく提供していることですが、javascriptは間違ったアドレスにAPIリクエストを出しています。フロントエンドアプリケーションは、バックエンドのアドレスを使用してホストマシンの観点から構成する必要があります。これは、ホストマシンが実際にAPI呼び出しを実行しているためです。

ドッカーマシンのIPアドレスをコンテナの環境に渡す方法はありますか?これを可能にする他のネットワーク設定もあります。実際の答えよりも回避策の

+0

私のブラウザの「localhost」は私のMacです。 docker-machineは他のアドレスのLinux VMです。コンテナはそのVM内で実行され、ポートはVMに転送されますが、Macでは転送されません。ここにdocページがあります:https://docs.docker.com/engine/installation/mac/ –

+0

MACとVM間のポートフォワードは、SSHなどのdocker-machineで設定できます。 – MinusFour

+0

IMOあなたが使用しているバックエンドにリバースプロキシとして機能するようにnginxを設定するのが最善でしょう。これにより、APIのURLは同じドメインを基準にして維持されます。 – MinusFour

答えて

0

より:私は、静的に定義されたアドレスの代わりに「document.location.hostname」を使用するには、フロントエンドの設定を変更することができました

考えられるオプションは、いくつかのスクリプト(下記参照)に基づいて動的に更新されるエントリを/ etc/hostsに持つことで、VMが常に静的な名前で参照可能になるようにし、名。これはハックの詳細ですが、より一般的な状況で適用される可能性があります。

if [ ! -z "$DOCKER_HOST" ]; then 
    ip=`echo $DOCKER_HOST | grep -o '\d\+\.\d\+\.\d\+\.\d\+'` 
    grep -v "$ip" /etc/hosts | grep -v "docker-dev" > tmp_hosts 
    echo "$ip docker-dev" >> tmp_hosts 
    sudo mv tmp_hosts /etc/hosts 
fi 
関連する問題