web-dev-qa-db-ja.com

Docker内でmysqlを実行するためにmysqlワークベンチを接続する方法は?

Dockerコンテナ内でmysqlサーバーを使用しており、Docker内にアクセスできます。ローカル(ホストマシン)で実行されているmysqlワークベンチで接続を作成する方法。

34
Pawan Kumar

Dockerコンテナでいくつかの設定を行う必要があります。次の手順に従ってください。

  1. Docker-compose.ymlでmysql構成ブロックを指定します。 docker-compose.ymlファイルのservicesオブジェクトの下に次のmysqlブロックがあります。

    services:
        db:
            image: mysql
            volumes:
                - "./.data/db:/var/lib/mysql"
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: mydb
                MYSQL_USER: user
                MYSQL_PASSWORD: pass
            ports:
                42333:3306
    
  2. Dockerコンテナを再起動し、次のコマンドを実行してmysqlコンテナのbashシェルにアクセスします

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    

    コンテナ内で、mysqlコマンドラインタイプに接続するには、

    mysql -u root -p
    

    Docker-compose.ymlで指定されているMYSQL_ROOT_PASSWORDを使用します。次のコマンドを実行して、新しいユーザーを作成します。

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    

    パーセント記号(%)は、すべてのIPを意味します。 Dockerコンテナを再起動します。

  3. MySQL Workbenchで接続の詳細を提供します。 docker-compose.ymlファイルで指定されているようにMYSQL_PASSWORDを使用します。

    enter image description here

これで、mysqlコンテナに接続できるはずです。

21
Krishna

デプロイ後のデフォルトでは、MySQLには次の接続制限があります。

mysql> select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

どうやら、セキュリティ上の理由から、Dockerイメージの外部に接続することはできません。ルートを任意のホストから接続できるように変更する必要がある場合(開発目的など)、次のようにします。

  1. 必要なすべてのポートマッピングでmysqlイメージを開始します。

    docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7

または、完全なポートマッピングが必要な場合:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
  1. これが新規インストールの場合-デフォルトのパスワードを取得します。

    docker logs mysql57 2>&1 | grep GENERATED

  2. mysqlクライアントを使用して、dockerのmysqldに直接接続します。

    docker exec -it mysql57 mysql -uroot -p

  3. これが新規インストールの場合、ALTER USERコマンドを使用してパスワードを変更するよう求められます。やれ。

  4. SQLを実行します。

    update mysql.user set Host = '%' where user='root';

  5. mysqlクライアントを終了します。

  6. コンテナを再起動します。

    docker restart mysql57

これで、MySQL Workbenchからに接続できるようになります

Host: `0.0.0.0` 
port: `3306`

すべての変更後、クエリは次のように表示されます。

select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+
15

2ドッカー関連の条件:

  • 最初に、docker runでmysqlポートをホストポートにマップする必要があります。

    docker run -p Host:container
    

(たとえば:docker run -d -p 3306:3306 tutum/mysql

  • 2番目に、VM(docker-machine、boot2docker))でdockerを使用している場合、docker-machine ip <VMname>のipをホストマップポートで使用する必要があります。

    http://$(docker-machine ip <VMname>):hostPort
    

localhostを使用する必要がある場合、 VirtualBoxレベルでのポート転送 を実行する必要があります。

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"

controlvm VMが実行されている場合、modifyvmはVMが停止されている)](「boot2docker-vm」を置き換えますvmの名前:docker-machine lsを参照)


2 mysql関連の条件:

  • nkratzke/EasyMySQL/Dockerfile に示すように、リモートアクセスを有効にする必要があります。

    # Enable remote access (default is localhost only, we change this
    # otherwise our database would not be reachable from outside the container)
    RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
    
  • Dockerイメージでデータベースを開始するときにユーザーを作成する必要があります。
    たとえば nkratzke/EasyMySQL/start-database.sh を参照してください。これは Dockerfile CMD によって呼び出されます。

    /usr/sbin/mysqld &
    sleep 5
    echo "Creating user"
    echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8
    echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "finished"
    
14
VonC

docker-composeファイルの次のコンテンツがあるとします:

database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "MYSQL_DATABASE=Homestead" - "MYSQL_USER=Homestead" - "MYSQL_PASSWORD=secret" - "MYSQL_ROOT_PASSWORD=secret" ports: - "33061:3306"

Localhostの場合は、ホスト127.0.0.1と33061ポートを使用するだけです enter image description here

5
Deadpool

Hostname:127.0.0.1(ローカルホスト)、デフォルトでポート3credを使用します。

2
Pawan Kumar

@Krishnaの回答は機能しましたが、小さな変更が加えられました-ユーザーは次のように追加されました

create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

を参照してください認証プラグイン「caching_sha2_password」をロードできません

2
andrew
  1. 設定を指定docker-compose.yml。詳細 こちら 。例:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. このコマンドを実行しますdocker-compose upおよび別の端末の実行docker psコンテナを表示します。
  3. ドッカーにアクセスします:docker exec -it test-mysql bash
  4. コンテナ内で、mysqlコマンドラインタイプに接続するには、mysql -u root -p
  5. 新しいユーザーを作成する
  6. 最後にMySQL Workbenchを構成します

enter image description here

1
DNick

Mysqlドッカーハブに示されている指示に従いました。このdocker-compose.ymlを書きました

version: '3.1'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306

接続するときにmysqlワークベンチに移動し、パラメーターのパスワードを必ずクリアしてください。パスワードを入力してください(私の場合はexample

0
user5848619

「設定->ネットワーク->ポート転送」で、ホスト/ゲストIPを0.0.0.0に、ホスト/ゲストポートを3306に設定する必要があります。

0
Luiz Soto