2017-08-17 164 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是否適合你? –

相關問題