2017-08-17 166 views
1

我试图从compose文件指定的同一网络上的另一个容器内连接到一个mysql容器。从另一个容器连接到mysql容器

version: "2" 
services: 
    web: 
    build: 
     context: . 
     dockerfile: nginx/Dockerfile 
    ports: 
     - "8080:80" 
    volumes: 
     - ./data:/srv 
    php: 
    build: 
     context: . 
     dockerfile: php-fpm/Dockerfile 
    volumes: 
     - ./data:/srv 
    mysql: 
    image: mysql 
    environment: 
     - MYSQL_ALLOW_EMPTY_PASSWORD=yes 
     - MYSQL_USER=dummy_user 
     - MYSQL_PASSWORD=12345 

我真的不知道,如果我试图连接到从PHP容器mysql的容器中的连接参数是什么。

具体来说,内的mysql容器的主机和端口是什么?同一个docker-compose网络的另一个容器是什么?

我试过主机:mysql端口:3306,但似乎没有工作。

回答

0

你不共享端口的mysql

添加到您的码头工人,compose.yml到MySQL服务:

ports: 
    - "3306:3306" 

UPD

尝试设置你的mysql容器的环境

MYSQL_ROOT_PASSWORD: 123456 
MYSQL_USER: dev 
MYSQL_PASSWORD: 123456 
MYSQL_DATABASE: myapp 

$link = mysqli_connect("mysql", "dev", "123456", "myapp"); 

应该工作正常

+1

这是不正确的共享服务在同一个码头网络上。我不会将容器暴露给主机。我想将容器暴露于同一个码头网络上的另一个容器。 – Confused

+0

@Confused see upd – Andrei

3

您应该链接的容器。添加端口部分到mysql container和链接部分到php容器。

version: "2" 
services: 
    web: 
    build: 
     context: . 
     dockerfile: nginx/Dockerfile 
    ports: 
     - "8080:80" 
    volumes: 
     - ./data:/srv 
    php: 
    build: 
     context: . 
     dockerfile: php-fpm/Dockerfile 
    links: 
     - mysql:mysql 
    volumes: 
     - ./data:/srv 
    mysql: 
    image: mysql 
    ports: 
     - "3306:3306" 
    environment: 
     - MYSQL_ALLOW_EMPTY_PASSWORD=yes 
     - MYSQL_USER=dummy_user 
     - MYSQL_PASSWORD=12345 

通过这种结构,你就可以从PHP访问mysql的容器MySQL的:3306

文件的位:https://docs.docker.com/compose/networking/#updating-containers

+0

@Confused是否适合你? –

相关问题