web-dev-qa-db-ja.com

[Docker]:PHPMyAdminをMySQLに接続できない

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にもリンクしました。そこで動作します...

15
Pascal

それらを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/ (範囲外)

33
Eugen Mayer

Phpmyadmin/phpmyadminの構成ファイル(/www/config.inc.php)は、デフォルトで 'db'の場合、データベースサーバーのホスト名を示します。

$ hosts = array( 'db');

したがって、データベース名コンテナが「db」ではない場合は、環境変数PMA_Host =(またはマルチdbサーバーの場合はPMA_HOSTS)を正しい名前(この場合はdatabaseContainer)で追加する必要があります

10
JL M

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

3
mtebong
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サーバーに付けられた名前です。

2
AKASH DUBEY

私の場合、MySQL 8.0を使用していて、mysqlがphpmyadminでサポートされていない新しいパスワードIDを導入していることがわかりました。 この回答 を参照してください。

1
vivanov

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」でログインします(サーバーフィールドは空白のままにします)。

1
Ivor