Docker:无法通过 phpmyadmin 使用“localhost”作为服务器访问 mariadb

问题描述 投票:0回答:1

这是我的 docker-compose.yml 配置:

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: './apache/Dockerfile'
    restart: always
    ports:
      - '8100:80'
    env_file:
      - ./env/db.env
      - ./env/modx.env
    volumes:
      - './public_html:/var/www/html'
      - './elements:/var/www/html/elements'
  db:
    image: 'mariadb:10.3.38'
    networks:
      - my-mariadb-net
    volumes:
      - ./db-data:/var/lib/mysql
    env_file:
      - ./env/db.env
    ports:
      - '3307:3306'
    command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
    restart: always
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8110:80

在生产中,我通过 php 到 mysql 服务器的连接如下:

$database_dsn = 'mysql:host=localhost;dbname=dbname;charset=utf8mb4';

本地我已经在我的 Linux 上安装了 Docker,并且想要复制它,所以我不需要手动更改它。我可以从主机连接到数据库服务器的唯一方法是将服务名称放在那里 - 在这种情况下为db。但是,我希望在我的产品中拥有它,即 localhost

我的问题是:有什么好的方法可以得到吗?我不担心安全风险,因为它总是在本地。

谢谢你。

docker docker-compose mariadb docker-container
1个回答
0
投票

有什么好的方法可以获取吗?

没有。

Docker 虚拟化网络。这里有 4 个本地主机。每个容器都有自己的本地主机接口。并且您的主机有一个本地主机。它们都是完全独立的

lo
接口。

您可以使用

network: host
禁用网络虚拟化。端口重定向也不会产生任何影响,因为不会出现网络虚拟化。这不是一个好方法,因为它减少了 docker 和容器化的好处,比如分离。

© www.soinside.com 2019 - 2024. All rights reserved.