簡體   English   中英

docker-compose 上的 Wordpress 沒有運行

[英]Wordpress on docker-compose no run

這是我的 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容器之前完全加載。 您需要告訴 docker 將db容器從wordpress容器鏈接起來,以按名稱引用它。

docker-composedocker-compose所做的是獲取 ip docker 給db容器並在wordpress容器中添加一個/etc/hosts條目,以便您可以按名稱引用它。

所以嘗試將其添加到 wordpress 部分

links:
  - db

您是否在 Compose 文件 wordpress 服務(密碼除外,顯示在您的帖子中)中設置數據庫主機(和其他需要的 MySql 屬性)? 例如:

environment:
  WORDPRESS_DB_PASSWORD: example
  WORDPRESS_DB_HOST: db
  WORDPRESS_DB_USER: {xxx}
  WORDPRESS_DB_NAME: {xxx}
  WORDPRESS_TABLE_PREFIX: {xxx}

特別是“主機”值,在您的設置中應該是db 您不必進行任何鏈接,盡管添加是個好主意

depends_on:
  - db

到您的 wordpress 服務塊,它將設置依賴順序以在您的 wordpress 容器之前啟動 db 容器。 (一個links屬性會做同樣的事情,但盡量保持簡單。)

注意:

默認情況下,Compose 為您的應用程序設置單個網絡 服務的每個容器都加入默認網絡,並且可以被該網絡上的其他容器訪問,並且可以在與容器名稱相同的主機名上被它們發現。

鏈接允許您定義額外的別名,通過這些別名可以從另一個服務訪問服務。 它們不需要啟用服務進行通信 -默認情況下,任何服務都可以以該服務的名稱訪問任何其他服務

https://docs.docker.com/compose/networking/#/links

除非您真正了解自己在做什么,否則我不會亂搞網絡,因為在大多數情況下,默認設置可以正常工作。 如果您有一些特殊情況,您可以隨時對其進行優化。

在 'db:' 下添加這些為我解決了這個問題。

    command: --default-authentication-plugin=mysql_native_password
    restart: always

我沒有使用 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 

現在開始了。

如前所述,您應該添加

depends_on:
  - db

但在此之后,我仍然收到有關連接問題的消息。 只有這個明確的問題 - 第二種選擇:

networks:
    local:

這解決了錯誤PHP Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in Standard input code on line 22

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM