簡體   English   中英

在docker中使用localhost而不是db作為mysql主機名

[英]Using localhost instead of db for the mysql hostname in docker

我想在php中使用localhost指向mysql容器的ip而不是指向自身,以便可以將mysql容器用於數據。

如何在我的php調用mysql中使用localhost

$mysqli = new mysqli("localhost", "root", "examplepass", "set", 3306);

除非我使用db作為主機名,否則以上代碼將不起作用。

db:
  image: mariadb
  container_name: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass

www:
  build: ./images/www
  links:
    - db:mysql
  ports:
    - 8080:80

我是否必須通過Dockerfile或撰寫yaml來更改容器中的hosts文件?

這將按您期望的那樣工作,但是www將會在其監聽的位置(80,而不是8080):

version: "2"

services:
  db:
    image: mariadb
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: examplepass
    network_mode: "host"

  www:
    build: ./images/www
    links:
      - db
    network_mode: "host"

假設使用network_mode: "host" ,容器與您的主機使用相同的本地主機。

將mysql bind-address配置為localhost以避免將mysql暴露在主機之外。

您可以嘗試使用“ socat”來實現,您可以在PHP容器中將來自端口3306的任何請求轉發到“ db”容器。 因此,在您的情況下(www),在PHP容器下使用localhost:3306時,所有請求都將從“ db”提供。 但是您需要確保socat已安裝在“ www”容器中並轉發端口。

Socat示例:socat TCP-LISTEN:3306,fork TCP:db:3306

通過示例檢查什么是socat: https ://www.cyberciti.biz/faq/linux-unix-tcp-port-forwarding/

我希望您可以通過使用上述內容並在容器中進行一些更改來實現您想要的目標

暫無
暫無

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

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