Php 通过docker compose将laravel容器连接到现有mysql容器

Php 通过docker compose将laravel容器连接到现有mysql容器,php,mysql,laravel,docker,Php,Mysql,Laravel,Docker,我是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: - ./:/

我是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机器上运行


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

尝试此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.如果不使用用于laravel的docker-只需更改变量DB_HOST=localhost

即可尝试此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.如果不使用用于laravel的docker-只需在.env文件中更改变量
DB_HOST=localhost

DB_HOST=db
DB_PORT=3306
DB_DATABASE=your database name
DB_USERNAME=root
DB_PASSWORD=root
在.env文件中:

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


问题仍然是一样的,我有案例1:我在docker上使用laravel。脚本为laravel创建了2个容器,第一个为laravel,第二个为MySQL。您是否已将
网络:-myapp-network
添加到laravel容器中?docker在一个网络中连接容器,在容器内部,您也可以通过名称调用其他容器,如果您使用1个选项-change
DB_PORT=3306
Yes,根据您的回答,我已经在DB上下文中添加了网络,并且还定义了网络:myapp网络:驱动程序:其中的网桥。我想,如果我有一个已经在docker机器上运行的MYSQL docker容器,我只需要在我的laravel.env文件中添加配置。并从docker-compose.yml文件中删除MYSQL配置。你说什么?问题仍然是一样的,我有一个案例:我在docker上使用laravel。脚本为laravel创建了2个容器,第一个为laravel,第二个为MySQL。您是否已将
网络:-myapp-network
添加到laravel容器中?docker在一个网络中连接容器,在容器内部,您也可以通过名称调用其他容器,如果您使用1个选项-change
DB_PORT=3306
Yes,根据您的回答,我已经在DB上下文中添加了网络,并且还定义了网络:myapp网络:驱动程序:其中的网桥。我想,如果我有一个已经在docker机器上运行的MYSQL docker容器,我只需要在我的laravel.env文件中添加配置。并从docker-compose.yml文件中删除MYSQL配置。你怎么说?你能给我们看一下你所有的
docker compose.yml
内容吗?你遇到的具体问题是什么?你看过Docker文档了吗?@MuhammadSipra也发了你的env。我是说DB_*的env。你能给我们看一下你所有的
Docker compose.yml
内容吗?你遇到的具体问题是什么?你看过Docker文档了吗?@MuhammadSipra也发了你的env。我是说DB_u*的env。
3007
是发布的端口。因为您使用的是
db
作为主机,所以端口应该是
3006
3007
是发布的端口。因为您使用的是
db
作为主机,所以端口应该是
3006