Docker 无法远程登录到MariaDB容器
我正在使用docker compose运行MariaDB,它运行得很好。我正在获取jasper服务器和maria DB docker图像并运行它们。当我telnet jasper服务器映像时,它会正确响应,但当我telnet到MariaDB时,它会说:Docker 无法远程登录到MariaDB容器,docker,telnet,Docker,Telnet,我正在使用docker compose运行MariaDB,它运行得很好。我正在获取jasper服务器和maria DB docker图像并运行它们。当我telnet jasper服务器映像时,它会正确响应,但当我telnet到MariaDB时,它会说: telnet localhost 3306 Trying ::1... Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused 我可能做错
telnet localhost 3306
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
我可能做错了什么?以下是sudo docker ps-a的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e759f106006 bitnami/jasperreports:7 "/app-entrypoint.sh …" 21 minutes ago Up 21 minutes 0.0.0.0:9093->8080/tcp, 0.0.0.0:443->8443/tcp ceyedev_jasperreports_1
9242e52f6af8 bitnami/mariadb:10.3 "/opt/bitnami/script…" 21 minutes ago Up 21 minutes 3306/tcp ceyedev_mariadb_1
这是我的docker撰写文件:
version: '2'
services:
mariadb:
image: 'bitnami/mariadb:10.3'
environment:
- MARIADB_USER=bn_jasperreports
- MARIADB_DATABASE=bitnami_jasperreports
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- 'mariadb_data:/bitnami'
jasperreports:
image: 'bitnami/jasperreports:7'
environment:
- MARIADB_HOST=mariadb
- MARIADB_PORT_NUMBER=3306
- JASPERREPORTS_DATABASE_USER=bn_jasperreports
- JASPERREPORTS_DATABASE_NAME=bitnami_jasperreports
- ALLOW_EMPTY_PASSWORD=yes
ports:
- '9093:8080'
- '443:8443'
volumes:
- 'jasperreports_data:/bitnami'
depends_on:
- mariadb
volumes:
mariadb_data:
driver: local
jasperreports_data:
driver: local
您必须打开Docker compose文件中的端口(您发布的内容称为Docker compose文件,而不是Docker文件,Docker文件包含构建Docker映像的命令) 在
mariadb
部分,如下所示:
services:
mariadb:
image: 'bitnami/mariadb:10.3'
environment:
- MARIADB_USER=bn_jasperreports
- MARIADB_DATABASE=bitnami_jasperreports
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- 'mariadb_data:/bitnami'
ports:
- 3306
这样,MariaDB的3306端口将暴露于您的本地计算机。这意味着:
- 您可以通过3306端口访问MariaDB
- 任何直接通过网络访问您的计算机(即本地IP地址)的人都可以通过端口3306访问MariaDB
请记住与系统安全有关的这两件事。Docker compose
ports
指令实际上将容器端口公开并发布(绑定)到Docker主机(与expose
指令不同,该指令公开端口而不发布端口,即仅在容器之间内部)。所以是的,答案应该确实解决了问题(你在评论…?)之前试过了吗)。我很抱歉,你是绝对正确的。我忘记了compose文件中的这个双端口/公开特性。谢谢你提醒我。@MarcSances谢谢你的回答。我已经弄明白了。有一件事,暴露数据库端口会导致像这样的安全风险吗?安全风险就是答案中暴露的风险。这主要意味着在Docker主机中可以访问3306集装箱港口。通常,您希望在生产中隔离此端口,以便只有消费者服务(如API或jasper)能够访问数据库。但是,如果您的计算机在专用网络中运行,则不会有太大的安全问题。