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链接文档中所述 。