从docker容器连接到mysql数据库

我有这个docker文件,它按预期工作。 我有php应用程序连接到本地主机上的MySQL。

# cat Dockerfile FROM tutum/lamp:latest RUN rm -fr /app ADD crm_220 /app/ ADD crmbox.sql / ADD mysql-setup.sh /mysql-setup.sh EXPOSE 80 3306 CMD ["/run.sh"] 

当我试图运行数据库作为单独的容器,我的PHP应用程序仍然指向本地主机。 当我连接到“web”容器时,我无法连接到“mysql1”容器。

 # cat docker-compose.yml web: build: . restart: always volumes: - .:/app/ ports: - "8000:8000" - "80:80" links: - mysql1:mysql mysql1: image: mysql:latest volumes: - "/var/lib/mysql:/var/lib/mysql" ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: secretpass 

我的PHP应用程序如何从另一个容器连接到MySQL?

这与这里提出的问题类似

从主机连接到docker容器中的mysql

我不想从主机连接到MySQL,我需要从另一个容器连接。

起初你不应该暴露mysql 3306端口,如果你不想从主机调用它。 在第二个链接现在被弃用。 你可以使用networking来代替。 我不确定关于撰写第1版,但在第2版中,所有在通用docker组成文件中的容器都在一个networking中( 更多关于networking ),并且可以通过名称相互parsing。 docker-compose v.2文件示例:

 version: '2' services: web: build: . restart: always volumes: - .:/app/ ports: - "8000:8000" - "80:80" mysql1: image: mysql:latest volumes: - "/var/lib/mysql:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: secretpass 

有了这样的configuration,您可以通过名称mysql1内部的web容器来parsingmysql容器。