【问题标题】:Connect laravel container to existing mysql container via docker compose通过 docker compose 将 laravel 容器连接到现有的 mysql 容器
【发布时间】:2020-03-01 13:05:00
【问题描述】:

我是 docker 新手,我正在尝试通过 docker-compose 将现有的 MySQL 容器连接到我的 Laravel 应用程序。

MySQL docker-compose.yml 文件在哪里

version: '3'

services:
  web:
    container_name: ${APP_NAME}_web
    build:
     context: ./docker/web
    ports:
      - "9000:80"
    volumes:
      - ./:/var/www/app
    depends_on:
      - db
  db:
    container_name: ${APP_NAME}_db
    image: mysql:5.7
    ports:
      - "3307:3306"
    restart: always
    volumes: 
      - dbdata:/var/lib/mysql/
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=laravel_docker_db
volumes:
  dbdata:
    driver: local
    driver_opts:
       type: none
       device: /storage/docker/laravel_mysql_data
       o: bind

此脚本正在下载最新的 mysql 版本并创建一个新容器。我只想将 MYSQL 容器与我的应用程序连接起来

我现有的 MYSQL 容器是使用桥接网络使用特定 IP 创建并在 docker-machine 上运行的。

我想知道,我可以在 db context 上定义现有的 MYSQL 容器配置吗?

【问题讨论】:

  • 你能告诉我们你所有的docker-compose.yml内容吗?
  • 您遇到的具体问题是什么?你读过 Docker 文档中的Networking in Compose 吗?
  • @MuhammadSipra 也发布你的环境..我的意思是 DB_* 的环境..

标签: php mysql laravel docker


【解决方案1】:

试试这个 docker-compose 文件:

version: '3.5'
services:
  db:
    container_name: myapp_db
    image: mysql:5.7
    ports:
      - "3307:3306"
    restart: always
    volumes:
      - dbdata:/var/lib/mysql/
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=laravel_docker_db
    networks:
      - myapp-network

networks:
  myapp-network:
    driver: bridge

情况有两种情况: 1. 如果您的 laravel 实例也在 docker 中 - 只需添加到 .env 文件的下一行:

DB_HOST=myapp_db
DB_PORT=3306
DB_DATABASE=laravel_docker_db
DB_USERNAME=root
DB_PASSWORD=root

2.如果你不使用 docker for laravel - 只需更改变量DB_HOST=localhost

【讨论】:

  • 问题还是一样,我有案例1:我在docker上使用laravel。脚本创建了 2 个容器,第一个为 laravel,第二个为 mysql
  • 你添加networks: - myapp-network到你的laravel容器了吗? docker 将容器连接在一个网络中,在容器内部你可以通过名称调用其他容器
  • 另外,如果您使用 1 个选项 - 更改 DB_PORT=3306
  • 是的,根据您的回答,我已经在 db 上下文中添加了网络,并且我还定义了网络:myapp-network: driver: bridge。
  • 我想,如果我有一个已经在 docker-machine 上运行的 MYSQL docker 容器,我只需要在我的 laravel .env 文件中添加配置。并从 docker-compose.yml 文件中删除 MYSQL 配置。怎么说?
【解决方案2】:

在 .env 文件中:

DB_HOST=db
DB_PORT=3306
DB_DATABASE=your database name
DB_USERNAME=root
DB_PASSWORD=root

【讨论】:

  • 3007 是发布的端口。既然您使用db 作为主机,那么端口应该是3006
猜你喜欢
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多