从docker容器连接到mysql数据库

我有这个docker文件,它正在按预期工作.我有连接到localhost上的mysqlPHP应用程序.

# 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"]

当我尝试将数据库作为单独的容器运行时,我的程序仍指向本地主机.当我连接到“ 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

这类似于这里提出的问题…

Connect to mysql in a docker container from the host

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

最佳答案
首先,如果您不想从主机上调用MysqL 3306端口,则不应该公开它.现在,第二个链接已被弃用.您可以改用网络.我不确定是否要编写v.1,但在v.2中,公共docker-compose文件中的所有容器都在一个网络(more about networks)中,并且可以通过彼此命名来解决. 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

通过这种配置,您可以在Web容器中通过名称MysqL1解析MysqL容器.

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...