Docker IP更改使得MySQL访问变得非常棘手

我试图locking一个MySQL用户帐户访问到一个IP地址,但似乎每次启动一个docker集装箱,IP地址的变化。

docker run -it company/my-app bash 

在上面安装mysql-client

 apt-get update apt-get upgrade apt-get install mysql-client 

现在我会连接使用:

 mysql -u blah -h database.host.com -p Access denied for user 'blah'@'172.17.0.63' (using password: YES) 

然后,我会授予blah'@'172.17.0.63所有权限,我可以从容器访问数据库。 现在我将开始一个新的docker集装箱,重复上述步骤,我会再次得到:

 Access denied for user 'blah'@'172.17.0.64' (using password: YES) 

每次启动Docker容器时,IP地址似乎都会增加。

我可以限制主机为%.%.%.% ,但这只是意味着任何IP地址都可以连接,而不是像我想要的那样安全。

是否有某种方式来限制只有一个docker容器或一组容器的MySQL帐户的访问?

您可以configuration一个由MySQL使用的小型dnsmasq实例,并在容器的IP地址发生变化时运行一个脚本来自动更新DNSlogging。

我已经写了一个小脚本来执行此操作(粘贴在下面),它会自动更新与容器名称相同的DNSlogging,并将它们指向容器的IP地址:

 #!/bin/bash # 10 seconds interval time by default INTERVAL=${INTERVAL:-10} # dnsmasq config directory DNSMASQ_CONFIG=${DNSMASQ_CONFIG:-.} # commands used in this script DOCKER=${DOCKER:-docker} SLEEP=${SLEEP:-sleep} TAIL=${TAIL:-tail} declare -A service_map while true do changed=false while read line do name=${line##* } ip=$(${DOCKER} inspect --format '{{.NetworkSettings.IPAddress}}' $name) if [ -z ${service_map[$name]} ] || [ ${service_map[$name]} != $ip ] # IP addr changed then service_map[$name]=$ip # write to file echo $name has a new IP Address $ip >&2 echo "host-record=$name,$ip" > "${DNSMASQ_CONFIG}/docker-$name" changed=true fi done < <(${DOCKER} ps | ${TAIL} -n +2) # a change of IP address occured, restart dnsmasq if [ $changed = true ] then systemctl restart dnsmasq fi ${SLEEP} $INTERVAL done 

然后,使用主机等于容器名称创build你的MySQL用户,例如你的容器名称是blah那么你创buildMySQL用户为'you'@'blah'

我认为你目前的做法是错误的。 你可以简单地使用官方的MySQL容器,并链接到你想要访问的钱包:

 docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql 

这将添加一个条目到名为“mysql”的some-app / etc / hosts文件,指向MySQL容器,如docker链接文档中所述 。