链接PHPdocker到主机的MySQL

我有以下docker-compose.yml

web: image: nginx ports: - "80:80" volumes: - ./src:/var/www - ./src/vhost.conf:/etc/nginx/sites-enabled/vhost.conf links: - php php: image: nmcteam/php56 volumes: - ./src/php-fpm.conf:/etc/php5/fpm/php-fpm.conf - ./src:/var/www links: - db db: image: sameersbn/mysql ports: - "3306:3306" volumes: - /var/lib/mysql environment: - DB_NAME=demoDb - DB_USER=demoUser - DB_PASS=demoPass 

一切工作正常,但我想是连接PHP到主机上安装的MySQL。 有没有办法实现这一目标?

谢谢。

你可以像在文档中说的那样链接mysql卷: http : //github.com/sameersbn/docker-gitlab#internal-mysql-server 。 或者可以绑定套接字(见下面的注释)

或者你可以find的IP和访问它作为一个外部的MySQL服务器。 默认networking模式是桥梁,所以ip应该是可访问的。 请参阅“ 从Docker容器内部,如何连接到本机的本地主机? ”,了解如何查找IP

这可能是最好的答案,因为创build任何新的安全问题的可能性较小:

将mysqld.sock从主机装载到容器中。

在运行mysql的主机上查找mysql.sock文件的位置:

 netstat -ln | awk '/mysql(.*)?\.sock/ { print $9 }' 

将该文件挂载到docker中预期的位置:

 docker run -v /hostpath/to/mysqld.sock:/containerpath/to/mysqld.sock 

mysqld.sock的可能位置:

 /tmp/mysqld.sock /var/run/mysqld/mysqld.sock /var/lib/mysql/mysql.sock 

在这里find: https : //stackoverflow.com/a/30484147/2245680

我采取了不同的方法,因为我只需要这个开发,我改变了networking模式,以便每个容器可以与主机进行通信。 为了达到这个目的,你可以在docker-compose.yaml做这样的事情:

 web: image: nginx volumes: - ./src:/var/www net: "host" php: image: nmcteam/php56 volumes: - ./src/php-fpm.conf:/etc/php5/fpm/php-fpm.conf - ./src:/var/www net: "host" 

https://docs.docker.com/compose/compose-file/#net