这是我的 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 虚拟化网络。这里有 4 个本地主机。每个容器都有自己的本地主机接口。并且您的主机有一个本地主机。它们都是完全独立的
lo
接口。
您可以使用
network: host
禁用网络虚拟化。端口重定向也不会产生任何影响,因为不会出现网络虚拟化。这不是一个好方法,因为它减少了 docker 和容器化的好处,比如分离。