草庐IT

docker - 从 docker 容器内部连接到 docker 守护进程

coder 2023-09-17 原文

我正在尝试配置 docker 守护进程,以便我可以从我启动的 docker 容器内部连接到它..

所以我把/etc/docker/daemon.json 改成了

{
   "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

所以我通过 docker 桥连接到它。但是当我重新启动 docker 时,我得到了

netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         
State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      3728/mysqld     
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      24253/redis-server 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3756/nginx      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3634/sshd       
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3756/nginx      
tcp6       0      0 :::8010                 :::*                    LISTEN      4230/apache2    
tcp6       0      0 :::9200                 :::*                    LISTEN      26824/java      
tcp6       0      0 :::9300                 :::*                    LISTEN      26824/java      
tcp6       0      0 :::22                   :::*                    LISTEN      3634/sshd       
tcp6       0      0 :::2375                 :::*                    LISTEN      1955/dockerd    

所以首先我认为问题是它正在监听 ipv6 而不是 ipv4。并根据 Make docker use IPv4 for port binding 它应该仍然有效,但它不.. 当我尝试时

telnet 172.17.0.1(docker host) 2375

连接失败

telnet 172.17.0.1(docker host) 80

有效。如何连接到主机上运行的 docker?我在 Ubuntu 14.04.5 docker 版本上运行:17.06.2-ce

最佳答案

您可以启动您的容器,将主机 docker 套接字安装到您的容器中。

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

通过此设置,容器内的 Docker 客户端将使用来自主机的 Docker 守护进程。您的容器将能够使用在主机中运行的守护进程来构建、运行、推送等。请注意,通过这些设置,一切都在主机上发生,因此如果您启动新容器,它们将成为“兄弟”容器。

编辑

如果您使用的是桥接网络,则可以使用主机 IP 地址连接到主机上运行的任何服务。

例如,我的 mysqld 在我的主机上运行,​​IP 为 10.0.0.1,并且来自一个我可以做的容器

mysql -u user -p -h 10.0.0.1

诀窍是从容器中找出主机 IP 地址。

在 Docker for Mac 中(我运行的是 17.07.0 版)就像连接到特殊主机“docker.for.mac.localhost”一样简单

另一种选择是将别名 IP 添加到环回接口(interface)

sudo ifconfig lo0 alias 192.168.1.1

然后在运行容器时为这个别名 IP 添加一个主机

docker run --rm -ti --add-host host-machine:192.168.1.1 mysql:5.7 bash

有了这个设置,你应该可以在容器里面做

mysql -u user -p -h host-machine

关于docker - 从 docker 容器内部连接到 docker 守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46916796/

有关docker - 从 docker 容器内部连接到 docker 守护进程的更多相关文章

  1. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  7. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  8. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  9. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  10. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

    我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

随机推荐