在docker中使用localhost而不是db作为mysql主机名

时间:2017-06-11 14:56:05

标签: php docker containers docker-compose dockerfile

我想在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以某种方式更改容器中的hosts文件或撰写yaml?

1 个答案:

答案 0 :(得分:0)

这将按预期工作,但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。