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

我想在php中使用localhost指向mysql容器的IP,而不是指向自己,所以我可以使用mysql容器的数据。

如何可以使用本地主机在我的PHP调用到MySQL

$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吗?

这将会像你期望的那样工作,但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" ,比方说,容器获得与你的主机相同的本地主机。

configurationmysql bind-addresslocalhost以避免在主机外面暴露MySQL。