docker - Drupal 容器未连接到 MariaDB 容器
问题描述
操作系统:CentOS 8
Docker 容器:drupal:latest & mariadb:latest
近两个星期以来,我一直在尝试通过将 Drupal 容器连接到 MariaDB 容器来学习 Docker 容器化,但不知道出了什么问题。
我刚跑:
systemctl stop firewalld
它终于奏效了!是的,我知道这是一件坏事,这就是我来这里的原因。我发现的教程都没有提到为 docker 打开防火墙端口。
我确实找到了一些在线教程,专门用于打开 docker 服务,但没有一个有效。他们中的大多数人告诉我运行:
firewall-cmd --permanent --zone=trusted --add-interface=docker0
,但这没有用。只有当我完全关闭防火墙时,安装才真正开始工作。
谁能解释我需要运行什么来保持防火墙运行,但允许容器相互通信?如果您简要解释每个命令的作用,这也会有所帮助,因为防火墙规则对我来说仍然有点神秘。
这是我运行的设置:
docker network create -d bridge meow
docker run \
-e MYSQL_ROOT_PASSWORD=admin \
-e MYSQL_DATABASE=drupal \
-e MYSQL_USER=drupal \
-e MYSQL_PASSWORD=drupal \
--network meow \
--name mariadb \
-d mariadb:latest
docker run \
-p 80:80 \
--network meow \
--name drupal \
-d drupal:latest
systemctl stop firewalld
请注意,在添加 docker-compose 等新工具之前,我想了解 docker 的工作原理。所以我可能正在努力做到这一点(我还不知道),但我只想在学习新事物之前弄清楚这一点。
谢谢。
解决方案
好的,由于某种原因,这行得通。
firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload
systemctl restart docker
更新:我发现了一些有助于解释为什么这样有效的信息:
The first command will add the Docker-interface to the trusted environment which allows Docker to make remote connections. The second command will allow docker to make local connections. This is particularly useful when multiple Docker containers are in as a development environment.
推荐阅读
- bash - Bash curl邮件:如何上传文件名中带有变音符号的文件?
- javascript - 如何使用 react 和 javascript 修复按钮以在禁用和启用状态之间切换?
- php - PHP 警告 array_column() 和 array_search()
- javascript - 如何使用 Vuejs 从数据库中填充值
- csv - 如何对位于 Google Cloud Storage 中的多个文件使用 google Data Prep?
- java - 使用带有嵌套属性的 Spring 和 YAML 注入值
- python - 如何避免在 SpaCy 中使用 Matcher 双重提取重叠模式?
- python - 在Visual Studio代码中,调试Python时如何找出哪个线程打开了某个文件?
- sql - 函数内的 SQL IF
- mongodb - 如何升级MongoDB以支持TLSv1.3。?