sql >> データベース >  >> RDS >> Mysql

DockerはアプリケーションをMySQLに接続できません

    docker-composeは、デフォルトで仮想ネットワークを作成します。これは、composeファイル内のすべてのコンテナー/サービスがIPアドレスによって相互に到達できる場合です。 linksを使用する 、depends_on または、ホスト名で相互に到達できるネットワークエイリアス。あなたの場合、ホスト名はサービス名ですが、これはオーバーライドできます。 (docs を参照してください。 )

    my_common_packageのスクリプト 次に、コンテナ/サービスはmysqlに接続する必要があります ポート3306 設定に応じて。 (localhostではありません ポート3306

    exposeを使用することにも注意してください サービスのDockerfileにEXPOSEがない場合にのみ必要です 声明。標準のmysqlイメージはすでにこれを行っています。

    コンテナポートをlocalhostにマップする場合 portsを使用する必要があります 、ただし、必要な場合にのみこれを行ってください。

    services:
       mysql:
         image: mysql:5.6
         container_name: test_mysql_container
         environment:
           - MYSQL_ROOT_PASSWORD=test
           - MYSQL_DATABASE=My_Database
           - MYSQL_USER=my_user
           - MYSQL_PASSWORD=my_password
         volumes:
           - db_data:/var/lib/mysql
         ports:
           - "3306:3306"
    

    ここでは、mysqlコンテナのポート3306をポート3306のローカルホストにマップする必要があると言っています。

    これで、localhost:3306を使用してmysqlに接続できます。 Dockerの外。たとえば、testsql.pyを実行してみることができます ローカル(コンテナ内ではありません)。

    コンテナ間の通信は、常に各コンテナのホスト名を使用して行われます。コンテナを仮想マシンと考えてください。

    docker network listを使用して作成されたネットワークdocker-composeを見つけることもできます。 :

    1b1a54630639        myproject_default             bridge              local
    82498fd930bb        bridge                        bridge              local
    

    ..次に、docker network inspect <id>を使用します 詳細を確認します。

    コンテナに割り当てられたIPアドレスはかなりランダムである可能性があるため、コンテナ間通信の唯一の実行可能な方法はホスト名を使用することです。




    1. T-SQLで日付から月を取得する方法

    2. Oracle PL / SQL:BLOBまたはCLOBが空かどうかを確認します

    3. 複数のMysqlステートメントをグループ化して複数のステータスのカウントをフェッチする

    4. DB設計:メンバーテーブルは個別ですか、それともすべて1つのテーブルにありますか?