これは私のdocker-compose.ymlです
version: '2'
services:
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_PASSWORD: example
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
サービスは正常に実行されますが、数秒後、wordpressコンテナが停止します。
これは私のdockerログですwordpressコンテナ:
WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10
なぜこれが起こるのですか?
解決策:
Mysqlコンテナをwordpressコンテナにリンクすることを忘れないでください:
links:
- db:mysql
このような:
version: '2'
services:
wordpress:
image: wordpress
ports:
- "8080:80"
links:
- db:mysql
environment:
WORDPRESS_DB_PASSWORD: example
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
この重要な詳細は WordPressイメージの公式Dockerhubページ には記載されていません
これ anwser は私のために働きます、なぜなら私はそのanwserに投票するのに十分な評判を持っていなかったので、私はそれをここにコピーします:
depends_on: - db
これは、データベースコンテナがwordpress
コンテナの前に完全にロードされていることを確認するだけです。 db
コンテナをwordpress
コンテナからリンクして、名前で参照するようにdockerに指示する必要があります。
内部でdocker-compose
が行うことは、ipdockerがdb
containerを提供し、/etc/hosts
エントリをwordpress
コンテナに追加して、名前で参照できるようにすることです。
だからこれをwordpressセクションlinks: - db
に追加してみてください
作成ファイルwordpressサービス(パスワード以外、投稿に表示))でDBホスト(およびその他の必要なMySql属性)を設定していますか?例:
environment:
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_Host: db
WORDPRESS_DB_USER: {xxx}
WORDPRESS_DB_NAME: {xxx}
WORDPRESS_TABLE_PREFIX: {xxx}
特に、セットアップではdb
である必要がある「Host」値。追加するのは良い考えですが、リンクを行う必要はありません。
depends_on:
- db
wordpressサービスブロックに、依存関係の順序を設定して、wordpressコンテナの前にdbコンテナを開始します。(links
属性は、同じですが、物事をシンプルにしようとしています。)
注意:
デフォルトでは、Composeはアプリに単一のネットワークを設定します。サービスの各コンテナはデフォルトのネットワークに参加し、そのネットワーク上の他のコンテナから到達可能であり、コンテナ名と同じホスト名でそれらによって検出可能です。
リンクを使用すると、別のサービスからサービスに到達できる追加のエイリアスを定義できます。これらは、サービスが通信できるようにするために不要です-デフォルトでは、どのサービスもそのサービスの他のサービスに到達できます名前。
ほとんどの場合、デフォルトで問題なく動作するため、自分が何をしているかを本当に理解していない限り、ネットワークをいじることはありません。特別な場合がある場合は、後でいつでも最適化できます。
'db:'の下にこれらを追加すると、問題が解決しました。
command: --default-authentication-plugin=mysql_native_password
restart: always
前に述べたように、追加する必要があります
depends_on:
- db
しかし、この後も接続の問題に関するメッセージが表示されます。そして、この明らかな問題のみ-2番目のオプション:
networks:
local:
この解決エラーPHP警告:mysqli :: __construct():php_network_getaddresses:getaddrinfo failed:22行目の標準入力コードでの名前解決の一時的な失敗
Ymlを使用しませんでしたが、同じログがあり、これは機能しませんでした
docker run -dP --link elated_yonath -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress
しかし、リンクされたコンテナに:mysqlを追加する必要があることがわかりました
docker run -dP --link elated_yonath:mysql -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress
今、それは始まりました。