![](/img/trans.png)
[英]Docker-compose: Connect to database using localhost & mysql as hostname
[英]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.