链接php docker来托管mysql

时间:2015-12-30 16:14:13

标签: docker docker-compose

我有以下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。有没有办法实现这个目标?

谢谢。

2 个答案:

答案 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"

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