从Docker容器内部,如何连接到本机的本地主机?
编辑:如果您使用的是Docker-for-mac或Docker-for-Windows 18.03+,只需使用主机连接到您的mysql服务即可host.docker.internal。 从Docker 18.09.3开始,这不适用于Docker-for-Linux。一个修复已三月提交的8日,2019年将有望被合并到代码库。在此之前,解决方法是使用qoomon的答案中描述的容器。 TLDR
--network="host"在您的docker run命令中使用,然后127.0.0.1在您的docker容器中将指向您的docker主机。 注意:根据文档,此模式仅适用于Docker for Linux 。 关于docker容器网络模式的注意事项
Docker 在运行容器时提供不同的网络模式。根据您选择的模式,您将以不同方式连接到在docker主机上运行的MySQL数据库。 docker run --network =“bridge”(默认)
Docker创建一个docker0默认命名的网桥。docker主机和docker容器都在该网桥上有一个IP地址。 在Docker主机上输入sudo ip addr show docker0你会看到如下输出: [vagrant@docker:~] $ sudo ip addr show docker0
: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default
link/ether ::7a:fe:: brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/ scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80:::7aff:fefe:/ scope link
valid_lft forever preferred_lft forever
所以这里我的docker主机172.17.42.1在docker0网络接口上有IP地址。 现在启动一个新容器并在其上获取一个shell:docker run --rm -it ubuntu:trusty bash并在容器类型ip addr show eth0中发现它的主网络接口是如何设置的: root@e77f6a1b3740:/# ip addr show eth0
: eth0: <BROADCAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :::f0:f1:e3 brd ff:ff:ff:ff:ff:ff
inet 172.17.1.192/ scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:::13ff:fef0:f1e3/ scope link
valid_lft forever preferred_lft forever
这里我的容器有IP地址172.17.1.。现在看一下路由表: root@e77f6a1b3740:/# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.17.42.1 0.0.0.0 UG eth0
172.17.0.0 * 255.255.0.0 U eth0
因此,docker主机的IP地址172.17.42.1被设置为默认路由,可以从容器中访问。 root@e77f6a1b3740:/# ping 172.17.42.1
PING 172.17.42.1 (172.17.42.1) () bytes of data.
bytes from 172.17.42.1: icmp_seq= ttl= time=0.070 ms
bytes from 172.17.42.1: icmp_seq= ttl= time=0.201 ms
bytes from 172.17.42.1: icmp_seq= ttl= time=0.116 ms
docker run --network =“host”
或者,您可以运行设置为的网络设置host的docker容器。这样的容器将与docker主机共享网络堆栈,并且从容器的角度来看,localhost(或127.0.0.)将引用docker主机。 请注意,Docker容器中打开的任何端口都将在docker主机上打开。这不需要-p或-P docker run选择。 我的docker主机上的IP配置: [vagrant@docker:~] $ ip addr show eth0
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether ::::dc:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/ brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe98:dcaa/ scope link
valid_lft forever preferred_lft forever
从主机模式的docker容器: [vagrant@docker:~] $ docker run --rm -it --network=host ubuntu:trusty ip addr show eth0
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether ::::dc:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/ brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe98:dcaa/ scope link
valid_lft forever preferred_lft forever
正如您所看到的,docker主机和docker容器共享完全相同的网络接口,因此具有相同的IP地址。 从容器连接到MySQL
桥接模式
要在桥接模式下从容器访问在docker主机上运行的MySQL ,您需要确保MySQL服务正在侦听172.17.42.1IP地址上的连接。 为此,请确保您具有bind-address = 172.17..1或bind-address = 0.0..0在MySQL配置文件(my.cnf)中。 如果需要使用网关的IP地址设置环境变量,则可以在容器中运行以下代码: export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')
然后在您的应用程序中,使用DOCKER_HOST_IP环境变量打开与MySQL的连接。 注意:如果您使用bind-address = 0.0..0MySQL服务器将侦听所有网络接口上的连接。这意味着可以从Internet访问您的MySQL服务器; 确保相应地设置防火墙规则。 注2:如果你使用bind-address = 172.17..1你的MySQL服务器将不会监听连接127.0.0.。在docker主机上运行的想要连接MySQL的进程必须使用172.17.42.1IP地址。 主机模式
要从主机模式下的容器访问在docker主机上运行的MySQL ,您可以保留bind-address = 127.0..1MySQL配置,您需要做的就是127.0.0.1从容器连接到: [vagrant@docker:~] $ docker run --rm -it --network=host mysql mysql -h 127.0.0.1 -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.5.-0ubuntu0.14.04. (Ubuntu) Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
注意:不要使用mysql -h 127.0.0.1,而不是mysql -h localhost; 否则MySQL客户端将尝试使用unix套接字进行连接。
从Docker容器内部,如何连接到本机的本地主机?的更多相关文章
- Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...
- Docker容器内部端口映射到外部宿主机端口的方法小结
转自:https://www.cnblogs.com/kevingrace/p/9453987.html Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以 ...
- 在宿主机上执行docker容器内部的shell或程序
为了避免反复进入docker容器内部操作,可以将一系列容器内部的指令由宿主机来操作完成. 在宿主机(作者主机为windows7)上执行centos容器(name为centos-1)中/usr目录下的“ ...
- Docker容器内部端口映射到外部宿主机端口 - 运维笔记
Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. 注意:宿主机的一个端口只能映射到容器内部的某一个端口 ...
- Docker容器内部端口映射到外部宿主机端口
Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. 注意:宿主机的一个端口只能映射到容器内部的某一个端口 ...
- Jenkins(4)docker容器内部修改jenkins容器时间
前言 用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间 查看时间 查看系统时间 date-R 进入docker容器内部,查看容器时间 docker e ...
- Docker学习(13) Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络基础 先安装网桥管理工具 Docker容器的互联 默认 Docker容器与外部网络的连接
- 如何进入到Docker容器内部
启动Docker容器后,对应的服务(例如tomcat启动)也通过dockerfile文件命令运行起来了,这个时候如何进行容器内部观察容器的运行状态. 1.docker attach 这个命令在创建一个 ...
- Docker基本命令与使用 —— Docker容器的网络连接(四)
一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...
随机推荐
- Jmeter接口测试(第二篇)
一.新建项目 1.运行Jmeter.bat打开Jmeter 2.添加线程组(测试计划->添加->Thread(users)->线程组) 3.添加HTTP请求(线程组->添加-& ...
- 【论文翻译】NIN层论文中英对照翻译--(Network In Network)
[论文翻译]NIN层论文中英对照翻译--(Network In Network) [开始时间]2018.09.27 [完成时间]2018.10.03 [论文翻译]NIN层论文中英对照翻译--(Netw ...
- Codeforces 500D. New Year Santa Network
题目大意 给你一颗有\(n\)个点的树\(T\),边上有边权. 规定,\(d(i,j)\)表示点i到点j路径上的边权之和. 给你\(q\)次询问,每次询问格式为\(i, j\),表示将按输入顺序排序的 ...
- STL容器-deque-双端队列
注明:全部来自转载,供自己学习与复习使用 deque双向开口可进可出的容器 我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去 deque却可以,它创造了内存连续的假象. 其实deque由一 ...
- pg_hba.conf配置文件
实例级别的权限由pg_hba.conf来控制,例如 : # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix doma ...
- java虚拟机(十四)--字节码指令
字节码指令其实是很重要的,在之前学习String等内容,深入到字节码层面很容易找到答案,而不是只是在网上寻找答案,还有可能是错误的. PS:本文基于jdk1.8 首先写个简单的类: public cl ...
- light oj 1071 dp(吃金币升级版)
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- Luogu P3953 逛公园(最短路+记忆化搜索)
P3953 逛公园 题面 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 \(N\) 个点 \(M\) 条边构成的有向图,且没有自环和重边.其中 \(1\) 号点是公园的入口,\(N\) 号点是公 ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- jQuery 源码解析(二十九) 样式操作模块 尺寸详解
样式操作模块可用于管理DOM元素的样式.坐标和尺寸,本节讲解一下尺寸这一块 jQuery通过样式操作模块里的尺寸相关的API可以很方便的获取一个元素的宽度.高度,而且可以很方便的区分padding.b ...