Dockerコンテナ内でmysqlサーバーを使用しており、Docker内にアクセスできます。ローカル(ホストマシン)で実行されているmysqlワークベンチで接続を作成する方法。
Dockerコンテナでいくつかの設定を行う必要があります。次の手順に従ってください。
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
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コンテナを再起動します。
MySQL Workbenchで接続の詳細を提供します。 docker-compose.ymlファイルで指定されているようにMYSQL_PASSWORDを使用します。
これで、mysqlコンテナに接続できるはずです。
デプロイ後のデフォルトでは、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イメージの外部に接続することはできません。ルートを任意のホストから接続できるように変更する必要がある場合(開発目的など)、次のようにします。
必要なすべてのポートマッピングで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
これが新規インストールの場合-デフォルトのパスワードを取得します。
docker logs mysql57 2>&1 | grep GENERATED
mysql
クライアントを使用して、dockerのmysqldに直接接続します。
docker exec -it mysql57 mysql -uroot -p
これが新規インストールの場合、ALTER USER
コマンドを使用してパスワードを変更するよう求められます。やれ。
SQLを実行します。
update mysql.user set Host = '%' where user='root';
mysql
クライアントを終了します。
コンテナを再起動します。
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 |
+-----------+---------------+
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"
Hostname:127.0.0.1(ローカルホスト)、デフォルトでポート3credを使用します。
@Krishnaの回答は機能しましたが、小さな変更が加えられました-ユーザーは次のように追加されました
create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
設定を指定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
docker-compose up
および別の端末の実行docker ps
コンテナを表示します。docker exec -it test-mysql bash
mysql -u root -p
。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
)
「設定->ネットワーク->ポート転送」で、ホスト/ゲストIPを0.0.0.0
に、ホスト/ゲストポートを3306
に設定する必要があります。