Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用docker容器设置mysql主机限制_Docker - Fatal编程技术网

如何使用docker容器设置mysql主机限制

如何使用docker容器设置mysql主机限制,docker,Docker,我正在将一个mysql:5容器(来自docker hub的图像)设置到与另一个容器(web服务器)共享的子网络中 我想将mysql用户限制为与web服务器容器对应的主机 如果我直接用web服务器容器ip限制它,它可以工作,但由于docker环境的原因,此ip不能更改,因此我希望有如下内容: GRANT ALL PRIVILEGES ON `db`.* TO 'user'@'container-name' 当我尝试连接服务器响应时: 用户'user'@'172.18.0.4'的访问被拒绝 其中1

我正在将一个mysql:5容器(来自docker hub的图像)设置到与另一个容器(web服务器)共享的子网络中

我想将mysql用户限制为与web服务器容器对应的主机

如果我直接用web服务器容器ip限制它,它可以工作,但由于docker环境的原因,此ip不能更改,因此我希望有如下内容:

GRANT ALL PRIVILEGES ON `db`.* TO 'user'@'container-name'
当我尝试连接服务器响应时:

用户'user'@'172.18.0.4'的访问被拒绝

其中172.18.0.4是web服务器容器的正确ip


示例:

docker-compose.yaml

包装容器

在mysql1中创建用户

尝试按用户从mysql2访问mysql1

错误1045(28000):用户'user'@'172.18.0.3'的访问被拒绝(使用密码:是)

Docker网络信息


bellackn的评论

这似乎是MySQL的skip resolve host选项的问题,该选项目前在Dockerfile中硬编码(请参阅此GitHub问题)。TLDR:您可以基于mysql:5创建自己的映像,并删除此选项,或者使用%通配符而不是mysql2

他就在这里,在第70行我们可以找到:

#don't reverse lookup hostnames, they are usually another container
&& echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf
我做了一个新的Dockerfile来删除这个配置文件

FROM mysql:5.7

RUN rm /etc/mysql/conf.d/docker.cnf

EXPOSE 3306 33060
CMD ["mysqld"]

bellackn的评论

这似乎是MySQL的skip resolve host选项的问题,该选项目前在Dockerfile中硬编码(请参阅此GitHub问题)。TLDR:您可以基于mysql:5创建自己的映像,并删除此选项,或者使用%通配符而不是mysql2

他就在这里,在第70行我们可以找到:

#don't reverse lookup hostnames, they are usually another container
&& echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf
我做了一个新的Dockerfile来删除这个配置文件

FROM mysql:5.7

RUN rm /etc/mysql/conf.d/docker.cnf

EXPOSE 3306 33060
CMD ["mysqld"]

您是否尝试过使用
docker compose
?由单个
docker组合而成的服务(即容器)能够通过其服务名称发现彼此,因此类似于
'user@web
应该在那里工作。是的,我的容器和桥接网络都在docker-compose.yaml文件中声明。并且
docker compose exec mysql ping web
返回一个肯定的响应。我明白了。这似乎是MySQL的
skip resolve host
选项的问题,该选项目前在Dockerfile中硬编码(请参阅)。TLDR:您可以基于
mysql:5
sed
这个选项创建自己的映像,或者使用
%
通配符而不是
mysql2
。就是这样,我没想到dockerfile会集成特殊配置。。。我的错。顺便说一句,非常感谢,我从一天开始就在使用它:您是否尝试过使用
docker compose
?由单个
docker组合而成的服务(即容器)能够通过其服务名称发现彼此,因此类似于
'user@web
应该在那里工作。是的,我的容器和桥接网络都在docker-compose.yaml文件中声明。并且
docker compose exec mysql ping web
返回一个肯定的响应。我明白了。这似乎是MySQL的
skip resolve host
选项的问题,该选项目前在Dockerfile中硬编码(请参阅)。TLDR:您可以基于
mysql:5
sed
这个选项创建自己的映像,或者使用
%
通配符而不是
mysql2
。就是这样,我没想到dockerfile会集成特殊配置。。。我的错。顺便说一句,非常感谢,我从一天开始就在使用它:pGlad它现在可以工作了。:)我想你可以接受你的答案,然后关闭这个。很高兴它现在起作用了。:)我想你可以接受你的答案,结束这一切。
docker network inspect test-mysql-user-host_default    
{
    "Name": "test-mysql-user-host_default",
    "Id": "305f4da33e0b79d899ac289e6b3fc1ebf2733baf0bf3d60a53cc94cec44176d1",
    "Created": "2019-04-26T09:53:23.3237197Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": null,
        "Config": [
            {
                "Subnet": "172.18.0.0/16",
                "Gateway": "172.18.0.1"
            }
        ]
    },
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "ConfigFrom": {
        "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {
        "133ebd1e6ba485212e5448670c66c1718917650bc217264183c725fb1a928118": {
            "Name": "mysql1",
            "EndpointID": "ce89aa1674e9c46fad50b2f36aec8d1eecf2227f597a785be67785ade770fef7",
            "MacAddress": "02:42:ac:12:00:02",
            "IPv4Address": "172.18.0.2/16",
            "IPv6Address": ""
        },
        "d67072a5c486752b7018fa321e47ae09fb873199604c2b520f2305968d43b577": {
            "Name": "mysql2",
            "EndpointID": "e6b62c6ce9e266d38be383fa6029f378e1ca67a18420dd3f508a3089200c0d98",
            "MacAddress": "02:42:ac:12:00:03",
            "IPv4Address": "172.18.0.3/16",
            "IPv6Address": ""
        }
    },
    "Options": {},
    "Labels": {}
}
#don't reverse lookup hostnames, they are usually another container
&& echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf
FROM mysql:5.7

RUN rm /etc/mysql/conf.d/docker.cnf

EXPOSE 3306 33060
CMD ["mysqld"]