如何将容器中的 symfony 5 DATABASE_URL(在 .env 中)连接到本地主机上的 wamp

Posted

技术标签:

【中文标题】如何将容器中的 symfony 5 DATABASE_URL(在 .env 中)连接到本地主机上的 wamp【英文标题】:How to connect symfony 5 DATABASE_URL (in .env) in a container to a wamp on localhost 【发布时间】:2021-10-23 14:16:23 【问题描述】:

我有一个使用 Symfony 为我的企业开发的项目。 绕过 *** 的解决方案是使用 docker 容器。

情况:

我的应用程序在容器中运行,但我在本地计算机上开发(我的意思是没有 WSL)。 我在我的本地主机上安装了一个 wamp,目标是将 Symfony 中 .env 中的 DATABASE_URL 配置到我的 wamp。

我的文件中没有任何 docker.compose.ymal,我使用这个命令行 docker run -ti --rm=true -p 8000:8000 -v %CD%:/opt/src [repo]/base-php74-tools:latest /bin/bash

显然,我用我连接的存储库替换了 [repo],但我写这个是为了匿名。

在我的C:\Windows\System32\drivers\etc\host 中,我有以下几行:

所以当我使用:DATABASE_URL="mysql://root:@10.4.24.163:3306/keuken?serverVersion=5.7"

它运行良好,但效率不高,因为 IP 是动态的。 所以我尝试使用 DNS 名称: DATABASE_URL="mysql://root:@host.docker.internal:3306/keuken?serverVersion=5.7"

我有这个错误:

我想那是因为 Symfony 等待一个 IP,但 IP 是动态变化的……那效率不高……

如何将容器化的 symfony 连接到本地主机上的 wamp?

【问题讨论】:

host.docker.internal 指向主机 IP,而不是一些外部 IP(基本上是 host.docker.internal === localhost)。还要确保您的 host.docker.internal 实际上解析为某个 IP 地址,因为并非所有 docker 都有它。您使用的是 Windows 还是 Linux? @Justinas 好的,我明白并考虑了这一点,但是当我使用与“Host.docker.internal”关联的 IP 时,它可以工作......为什么?通常不应该。是否可以在容器内找到 localhost IP? @Justinas 我是 Windows 用户 【参考方案1】:

我想最好通过像 docker-compose 这样的容器管理器。理想情况下,一个容器只服务一个任务

docker-compose.yaml 文件可能如下所示:

version: '3.7'


services:

    mysql:
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    image: mysql:5.7 # or 8.0 
    restart: always

    php-app:
    build: 
      context: .
      dockerfile: /path/to/php/dockerfile
    container_name: php-apache2
    depends_on:
      - mysql
    links:
      - mysql
    ports:
      - 8081:80
    restart: always
    working_dir: /var/www/app

【讨论】:

谢谢,我会检查创建一个docker-compose.yaml,你使用docker compose up来启动这个文件吗? 是的,“docker-compose up”是启动这个文件的好命令

以上是关于如何将容器中的 symfony 5 DATABASE_URL(在 .env 中)连接到本地主机上的 wamp的主要内容,如果未能解决你的问题,请参考以下文章

Docker/Symfony/Reactjs/Keycloak:如何使用分离的 docker-compose 文件从一个容器向另一个容器发出 HTTP 请求?

运行 PHPUnit 测试时,容器参数在 Symfony 5 服务中不可用/注入

Symfony 4 在 DEV 中运行缓慢

Symfony2 服务容器 - 将普通参数传递给服务构造函数

通过单元测试访问 Symfony 2 容器?

Symfony ServiceContainer在编译后删除服务