PHPMyAdmin-ContainerをMySQL-Containerに接続してデータベースを表示しようとしています。
$ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
経由でMySQLコンテナを開始しました
および$ docker run --name myadmin -d --link databaseContainer:mysql -p 8080:8080 phpmyadmin/phpmyadmin
経由のPHPMyAdmin-Container
PHPMyAdminでログインしようとすると、mysqli_real_connect():php_network_getaddresses:getaddrinfo failed:Name does not resolve
そして
mysqli_real_connect():(HY000/2002):php_network_getaddresses:getaddrinfo failed:名前が解決しない
ちなみに、私はwordpressコンテナを開始し、mysqlにもリンクしました。そこで動作します...
それらを1つずつ開始する代わりに、docker-compose
を使用します。
Docker-compose.ymlファイルを作成します
version: '2'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD:my-secret-pw
ports:
# just if you also want to access it directly from you Host
# node neede for phpmyadmin
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
ports:
- "8080:8080"
次に、docker-compose up
ファイルと同じフォルダーでdocker-compose.yml
を使用して起動します。ブラウザを使用してPHPmyadminにアクセスし、データベースのホスト名として「db」を使用します。これはdocker-compose.yml
ファイル内のサービスの名前であり、docker内部DNSサービスを使用してdockerの実際のIPに解決できるためです-容器。すべてのリンクは自動的にセットアップされます。
それははるかに簡単です-ドッカーの実行は物事を過度に複雑にし、それらのものにとって実用的ではありません-決して。
ヒント:マシンにdocker-composeがインストールされていない場合は、この公式ドキュメントを使用してインストールしてください https://docs.docker.com/compose/install/ (範囲外)
Phpmyadmin/phpmyadminの構成ファイル(/www/config.inc.php)は、デフォルトで 'db'の場合、データベースサーバーのホスト名を示します。
$ hosts = array( 'db');
したがって、データベース名コンテナが「db」ではない場合は、環境変数PMA_Host =(またはマルチdbサーバーの場合はPMA_HOSTS)を正しい名前(この場合はdatabaseContainer)で追加する必要があります
MySQLコンテナを次のように開始した場合:
$ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD = my-secret-pw -d mysql
次に、実際にphpmyadminを次のように作成する必要があります。
$ docker run --name myadmin -d --link mysql:db -p 8080:8080 phpmyadmin/phpmyadmin
実際には、ネットワークを含めることをお勧めします。だからあなたは次のようになります:
$ docker run --name databaseContainer --network myDockerNetwork -e MYSQL_ROOT_PASSWORD = my-secret-pw -d mysql
そして
$ docker run --name myadmin -d --link mysql:db --network myDockerNetwork -p 8080:8080 phpmyadmin/phpmyadmin
最初にネットワークが作成されていることを確認してください。
$ docker network create myDockerNetwork
docker run --name db -e MYSQL_ROOT_PASSWORD=mypass -d mysql:5.7
docker run -p 80:80 --link db:mysql phpmyadmin/phpmyadmin
上記のコマンドを実行してみてください。phpmyadminの実装では、mysqlサーバーのコンテナ名がdbになるようにハードコーディングされている可能性があります。
それでもdbサーバーに一意の名前を付けたい場合は、PMA_Host
環境変数:
docker run --name myadmin -d --link mysqlserver:mysql -p 8080:80 -e PMA_Host=mysqlserver phpmyadmin/phpmyadmin
mysqlserver
は、mysql dbサーバーに付けられた名前です。
私の場合、MySQL 8.0を使用していて、mysqlがphpmyadminでサポートされていない新しいパスワードIDを導入していることがわかりました。 この回答 を参照してください。
Laradockを使用してdockerをインストールしてからdocker-compose upを実行すると、同じエラーが発生しました。デフォルト設定では、phpMyAdminにログインしようとすると(2018年10月現在の現在のイメージを使用して)このエラーがスローされます。 docker runを使用してエラーは発生しませんでした。
Docker-compose.yml(バージョン3)の場合、1つの原因はデフォルトで異なるネットワークで実行されているサービスです。この問題を抱えている他の人のために、mysqlとphpmyadminで機能する設定を以下に示します。
「docker-compose.yml」ファイル内の「services」の下:
### db ###################################################
db:
image: mysql:5.7
container_name: db
environment:
- MYSQL_ROOT_PASSWORD=mypass
networks:
- backend
### MySQL ################################################
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
- ${DATA_PATH_Host}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
## phpMyAdmin ###########################################
phpmyadmin:
build: ./phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_Host=db
- MYSQL_USER=${PMA_USER}
- MYSQL_PASSWORD=${PMA_PASSWORD}
- MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD}
ports:
- "${PMA_PORT}:80"
depends_on:
- db
- mysql
networks:
- frontend
- backend
「.env」ファイルを次のように編集します。
### MYSQL #################################################
MYSQL_VERSION=5.7
MYSQL_DATABASE=db
MYSQL_USER=root
MYSQL_PASSWORD=mypass
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=mypass
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
### PHP MY ADMIN ##########################################
# Accepted values: mariadb - mysql
PMA_DB_ENGINE=mysql
# Credentials/Port:
PMA_USER=default
PMA_PASSWORD=secret
PMA_ROOT_PASSWORD=secret
PMA_PORT=8080
「/ etc/hosts」ファイルに次の行を追加します。
127.0.0.1 localhost
また、nginxを使用しており、その構成が "docker-compose.yml"の別の場所にあると仮定すると、これらのサービスをビルドして開始できます。
docker-compose up -d mysql nginx db phpmyadmin
次に、ブラウザでlocalhost:8080に移動し、ユーザー名「root」とパスワード「mypass」でログインします(サーバーフィールドは空白のままにします)。