链接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"