Docker内如何访问本机(宿主机)的具体方法

 更新时间:2018年10月20日 10:15:28   作者:在风中的意志  
这篇文章主要介绍了Docker内如何访问本机(宿主机)的具体方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Question

Docker内需要访问本机的数据库,如何访问。使用127.0.0.1肯定是不行的,因为这个在Docker容器里面指的是容器本身。所以,需要走别动渠道进行解决。

Solution

下面几种办法,根据操作系统的类型,选取其一即可。

DockerFile:

RUN /sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts

RunTime:

(may not use) docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [my container]
(useful) docker run --add-host=dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [IMAGE]

Docker for Mac (17.12+):

docker.for.mac.host.internal
MONGO_SERVER=docker.for.mac.host.internal

# docker-compose.yml
version: '3'

services:
 api:
  build: ./api
  volumes:
   - ./api:/usr/src/app:ro
  ports:
   - "8000"
  environment:
   - MONGO_SERVER
  command: /usr/local/bin/gunicorn -c /usr/src/app/gunicorn_config.py -w 1 -b :8000 wsgi

Linux

# Solution 1
/sbin/ip route|awk '/default/ { print $3 }'
docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [my container]
# Solution 2
-e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')"

Principle

想知道原理,需要了解计算机网络的模型和docker实现的模型。docker内部实际上实现了一个虚拟网桥docker0,需要通过网桥找到外部宿主机的在网桥的虚拟地址,也就是docker.for.mac.host.internal,就可以实现容器内访问外部宿主机。感兴趣的话可以了解下Docker的网络原理、计算机网络原理和docker compose等内容。

Reference

[1].(stackoverflow)insert-docker-parent-host-ip-into-containers-hosts-file

[2].(stackoverflow)how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Docker出现tag显示none镜像的处理方案

    Docker出现tag显示none镜像的处理方案

    本文介绍了Docker中出现REPOSITORY和TAG都显示为<none>的镜像,即悬挂镜像的原因,并提供了解决方法,包括查找和删除悬挂镜像,以及为它们指定新的标签
    2025-02-02
  • chatgpt-web之docker打包流程

    chatgpt-web之docker打包流程

    这篇文章主要介绍了chatgpt-web中docker的打包流程,文中有详细的代码示例,对学习或工作有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • 使用Docker 安装 Jenkins的方法

    使用Docker 安装 Jenkins的方法

    这篇文章主要介绍了使用Docker 安装 Jenkins的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • docker搭建xxl-job的实现步骤

    docker搭建xxl-job的实现步骤

    XXL-JOB是一个轻量级分布式任务调度平台,通过xxljob,我们可以方便地实现任务调度和任务执行监控,本文介绍了docker搭建xxl-job的实现步骤,感兴趣的可以了解一下
    2023-12-12
  • mac 中docker安装mysql的图文教程

    mac 中docker安装mysql的图文教程

    今天在Docker中安装了MySQL ,是自己打的docker包.首先新建Dockerfile,新建Dockerfile后执行build命令,具体详情在本教程中给大家介绍的非常详细,感兴趣的朋友参考下
    2016-11-11
  • 在Window 10上安装Docker图文教程

    在Window 10上安装Docker图文教程

    Docker 是一个开源的应用容器引擎,功能十分强大,相信开发者们都不陌生。现在,docker已经发布了支持Windows10的稳定版本,对于用户来说是一个福音。接下来,小编就详细介绍Win10系统安装docker教程。
    2018-03-03
  • 从docker镜像里提取dockerfile的两种方法

    从docker镜像里提取dockerfile的两种方法

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本,下面这篇文章主要给大家介绍了关于如何从docker镜像里提取dockerfile的两种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • docker安装RabbitMQ及安装延迟插件的详细过程

    docker安装RabbitMQ及安装延迟插件的详细过程

    MQ(message queue)字面意思上来说消息队列,是一种跨进程的通信机制,用于上下游传递消息,本文给大家详细介绍docker安装RabbitMQ及安装延迟插件的过程,感兴趣的朋友一起看看吧
    2022-06-06
  • docker容器的几种存储详解

    docker容器的几种存储详解

    本文主要介绍了docker容器的几种存储方式,主要介绍了3种,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 远程docker服务器携带证书连接的实现方法

    远程docker服务器携带证书连接的实现方法

    本文主要介绍了远程docker服务器携带证书连接的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论