web-dev-qa-db-ja.com

1つのDockerコンテナーが別のDockerコンテナーを呼び出す方法

2つのDockerコンテナーがあります

  1. Web API
  2. Web APIを呼び出すコンソールアプリケーション

今、私のローカルWeb APIはローカルホストであり、コンソールアプリケーションはAPIを呼び出すのに問題ありませんが、これら2つがDocker化されたときはわかりません。

私はAPIの引数としてAPIのURLを渡しているのでDockerized API's URLにDockerized Consoleがアクセスできることを確認するだけなので、Docker Composeは必要ないと思います

何か案は?

7
Lost

作成機能を使用すると、問題を簡単に解決できます。作成では、1つの構成ファイル(docker-compose.yml) このような :

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

実行するには、次のようにupを呼び出します。

docker-compose up 

これはすべてのスタックを実行する最良の方法なので、このリファレンスを確認してください: https://docs.docker.com/compose/

成功!

2
Imam Digmi

docker runlinkオプションを使用できます:

APIを実行します。

docker run -d --name api api_image

クライアントを実行します。

docker run --link api busybox ping api

apiはdockerで解決できるはずです。

とはいえ、docker-composeを使用する方がより良いオプションです。

5
lang2

アイデアは、URLを渡すのではなく、呼び出す他のコンテナのホスト名です。
参照 Composeのネットワーキング

デフォルトでは、Composeはアプリに単一のネットワークを設定します。サービスの各コンテナーは、デフォルトネットワークに参加し、そのネットワーク上の他のコンテナーから到達可能であり、コンテナー名と同じホスト名でそれらによって検出可能です。

非推奨--linkオプション

コンテナーが単一のDockerサーバーノードで実行されていない場合、 Docker Swarm Mode を使用すると、複数のノードでその検出が可能になります。

5
VonC