我有以下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。有没有办法实现这个目标?
谢谢。
答案 0 :(得分:1)
你可以像文档中所说的那样链接mysql卷:http://github.com/sameersbn/docker-gitlab#internal-mysql-server。或者可以绑定套接字(请参阅下面的评论)
或者你可以找到ip并将其作为外部mysqlserver访问。默认网络模式是桥接,因此ip应该是可访问的。 请参阅“From inside of a Docker container, how do I connect to the localhost of the machine?”了解如何查找IP
答案 1 :(得分:0)
这可能是最好的答案,因为它不太可能产生任何新的安全问题:
将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
在此处找到:https://stackoverflow.com/a/30484147/2245680
我采用了不同的方法,因为我只需要这个用于开发,我改变了网络模式,以便每个容器都可以与主机通信。为此,您可以在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"