MySQL-将远程连接限制为单个docker容器(在docker网络内)

时间:2019-01-19 16:03:32

标签: mysql docker

我正在尝试通过Docker服务部署Spring Web应用程序以测试我的项目。服务启动时没有任何问题,但是当我尝试通过主机通过Web应用访问端点时,出现以下错误消息:

  

不允许主机“ 172.21.0.2”连接到该MySQL服务器

这是我当前的设置:

  

docker-compose.yml

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: app-dockerfile
    image: app
    ports:
      - 8080:80
    command: java -Dserver.port:80 -jar app-0.1.0.jar

  appdb:
    build:
      context: .
      dockerfile: appdb-dockerfile
    image: appdb
  

app-dockerfile

FROM openjdk:8

WORKDIR /usr/local/bin

COPY ./target/app-0.1.0.jar .

EXPOSE 80/tcp
  

appdb-dockerfile

FROM mysql:latest

ENV MYSQL_ROOT_HOST=app
ENV MYSQL_DATABASE=appdbinstance
ENV MYSQL_ROOT_PASSWORD=appdbpassword

WORKDIR /docker-entrypoint-initdb.d

COPY ./dbscripts/master.sql .
  

application.yml

database:
  host: appdb
  instance: appdbinstance
  port: 3306
  user: root
  password: appdbpassword



到目前为止,我已经尝试过:


->将 MYSQL_ROOT_HOST = app 更改为 MYSQL_ROOT_HOST =%。这行得通,但是我不希望root用户能够从任何主机进行连接。我想将其限制为仅应用容器。


->我检查了绑定地址:

mysqld --verbose --help | grep bind-address

--bind-address=name IP address(es) to bind to. Syntax: address[,address]...,
  --mysqlx-bind-address[=name] 
bind-address                                                 *
mysqlx-bind-address                                          *

据我所知,这应该没问题,因为它允许任何远程主机连接到mysql。


->认为这可能与应用程序配置有关,因此我尝试使用应用程序容器内的mysql CLI工具连接到mysql,但出现了相同的错误消息。


->我运行以下脚本来确保创建了远程root用户(并已创建):

select user, host from mysql.user where user = 'root';

+------+-----------+
| user | host      |
+------+-----------+
| root | app       |
| root | localhost |
+------+-----------+

->我尝试将所有特权授予远程root用户(这不起作用。):

GRANT ALL PRIVILEGES ON appdbinstance.* TO 'root'@'app';

这时,看来根主机环境变量(MYSQL_ROOT_HOST)是问题的症结所在。如果是这种情况,我将不知道如何解决该问题(除了将其设置为%出于安全目的,我不希望这样做)。 最终,我正在尝试设置mysql服务器,使其仅接受来自特定用户(目前为root)的来自应用容器的连接。任何想法都欢迎。

0 个答案:

没有答案