【问题标题】:Docker containers linked but mysql cannot be connected toDocker 容器已链接,但无法连接 mysql
【发布时间】:2017-12-04 22:40:42
【问题描述】:

我对 docker 还是很陌生,为了让我的系统正常运行,我已经奋斗了两天。我的 compose 文件创建了 nginx、php-fpm、mysql 和 phpmyadmin 容器。我可以互相ping通所有容器。但是,当我尝试将安装的 public_html 卷中的任何内容安装到数据库中时(例如安装需要在数据库中创建表的应用程序),该应用程序根本无法连接到数据库。我已经确保一遍又一遍的凭据是正确的。对于我的生活,我不知道我要去哪里错了。任何帮助将不胜感激。我在下面包含我的撰写文件:

version: '3'
services:   
www:
container_name: site1-www
image: nginx:1.13.7-alpine
expose:
  - "80"
ports: 
  - 8001:80
networks:
  datacentre:
    aliases:
      - site1www  
env_file:
  - ".env"
environment:
  - NGINX_HOST=localhost
volumes:
  - /mnt/www/site1.test/public_html:/usr/share/nginx/html/
  - 
/mnt/www/site1.test/conf/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
  - db
links
  - db

phpfpm:
build: ./phpfpm
container_name: site1-phpfpm
networks:
  datacentre:
    aliases:
      - site1php
volumes:
  - /mnt/www/site1.test/public_html:/usr/share/nginx/html
  - /mnt/www/site1.test/conf/php.ini:/usr/local/etc/php/php.ini
depends_on:
  - db
links
  - db

db:
container_name: site1-db
image: mariadb:10.3.2
ports:
  - 3400:3306  
env_file:
  - ".env"
environment:
  - MYSQL_DATABASE=test1db
  - MYSQL_ROOT_PASSWORD=password
  - MYSQL_USER=test1user
  - MYSQL_PASSWORD=password
networks:
  datacentre:
    aliases:
      - site1db
volumes:
  - /mnt/dbdata:/var/lib/mysql

dbadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: site1-dbadmin
ports:
  - 8000:80
networks:
  datacentre:
    aliases:
      - site1dbadmin
environment:
  - PMA_ARBITRARY=1
  - PMA_HOST=mysql
depends_on:
  - db
links
  - db

networks:
  datacentre:
    external:
      name: datacentre_net

【问题讨论】:

  • 请检查您的链接配置是links还是links:
  • 很可能您的“应用程序”没有连接到端口 3400?
  • @Forbs docker 网络上的 3306 端口
  • 访问用户定义网络上的服务不需要链接

标签: php mysql docker nginx dockerfile


【解决方案1】:

第一次拍摄时,构图设置看起来有点复杂。删除所有名称和别名,并使用服务名称进行连接。然后从那里构建。

对于www 服务,nginx 应该将phpfpm:9000 配置为FastCGI worker。

您的 PHP 应用程序和 phpMyAdmin 应配置为连接到 db:3306

version: '3'

services:   
  www:
    image: nginx:1.13.7-alpine
    ports: 
      - 8001:80
    env_file:
      - ".env"
    environment:
      - NGINX_HOST=localhost
    volumes:
      - /mnt/www/site1.test/public_html:/usr/share/nginx/html/
      - /mnt/www/site1.test/conf/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - phpfpm

  phpfpm:
    build: ./phpfpm
    volumes:
      - /mnt/www/site1.test/public_html:/usr/share/nginx/html
      - /mnt/www/site1.test/conf/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - db

  db:
    image: mariadb:10.3.2
    ports:
      - 3400:3306  
    env_file:
      - ".env"
    environment:
      - MYSQL_DATABASE=test1db
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_USER=test1user
      - MYSQL_PASSWORD=password
    volumes:
      - /mnt/dbdata:/var/lib/mysql

  dbadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8000:80
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    depends_on:
      - db

links 不需要访问用户定义网络上的服务。

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2016-04-26
    • 2016-07-22
    • 2019-07-22
    • 2021-04-04
    • 2020-12-30
    • 2020-07-29
    • 2021-06-30
    • 2022-11-18
    相关资源
    最近更新 更多