Docker 无法远程登录到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 我可能做错

我正在使用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
我可能做错了什么?
以下是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)能够访问数据库。但是,如果您的计算机在专用网络中运行,则不会有太大的安全问题。