简体   繁体   English

通过主机ubuntu主机中的浏览器访问在vagrant vm上的coreos中运行的docker容器

[英]Access docker container running in coreos on vagrant vm through browser in host ubuntu host

I have setup coreos running in vagrant VM. 我已经设置了在vagrant VM中运行的coreos。 I want to setup private docker registry. 我想设置私人码头注册表。 I pulled registry and I can run it. 我拉了注册表,我可以运行它。 The following is the output on running registry 以下是运行注册表的输出

 core@core-01 ~ $ docker run -p 5000:5000 registry
2014-12-22 01:40:32 [1] [INFO] Starting gunicorn 19.1.0
2014-12-22 01:40:32 [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
2014-12-22 01:40:32 [1] [INFO] Using worker: gevent
2014-12-22 01:40:32 [20] [INFO] Booting worker with pid: 20
2014-12-22 01:40:32 [23] [INFO] Booting worker with pid: 23
2014-12-22 01:40:32 [24] [INFO] Booting worker with pid: 24
2014-12-22 01:40:32 [25] [INFO] Booting worker with pid: 25
2014-12-22 01:40:32 [1] [INFO] 4 workers
22/Dec/2014:01:40:32 +0000 WARNING: Cache storage disabled!
22/Dec/2014:01:40:32 +0000 WARNING: LRU cache disabled!
22/Dec/2014:01:40:32 +0000 DEBUG: Will return docker-registry.drivers.file.Storage
22/Dec/2014:01:40:32 +0000 WARNING: Cache storage disabled!
22/Dec/2014:01:40:32 +0000 WARNING: LRU cache disabled!
22/Dec/2014:01:40:32 +0000 WARNING: Cache storage disabled!
22/Dec/2014:01:40:32 +0000 DEBUG: Will return docker-registry.drivers.file.Storage
22/Dec/2014:01:40:32 +0000 WARNING: LRU cache disabled!
22/Dec/2014:01:40:32 +0000 DEBUG: Will return docker-registry.drivers.file.Storage
22/Dec/2014:01:40:32 +0000 WARNING: Cache storage disabled!
22/Dec/2014:01:40:32 +0000 WARNING: LRU cache disabled!
22/Dec/2014:01:40:32 +0000 DEBUG: Will return docker-registry.drivers.file.Storage
2014-12-22 02:40:32 [1] [INFO] 4 workers
2014-12-22 03:40:31 [1] [INFO] 4 workers
2014-12-22 03:53:42 [1] [INFO] 4 workers
2014-12-22 03:53:42 [1] [INFO] Handling signal: winch
2014-12-22 03:53:42 [1] [INFO] 4 workers
2014-12-22 03:53:43 [1] [INFO] 4 workers
2014-12-22 03:53:43 [1] [INFO] Handling signal: winch
2014-12-22 03:53:43 [1] [INFO] 4 workers

In my ubuntu host machine my ifconfig output shows the below content 在我的ubuntu主机上,我的ifconfig输出显示以下内容

me@mydesktop-Machine-Node00:~$ ifconfig
docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
      inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


eth0  Link encap:Ethernet  HWaddr d4:3d:7e:a1:25:1e  
      inet addr:192.168.65.27  Bcast:192.168.65.255  Mask:255.255.255.0
      inet6 addr: fe80::d63d:7eff:fea1:251e/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:457483 errors:0 dropped:0 overruns:0 frame:0
      TX packets:245109 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:492304997 (492.3 MB)  TX bytes:20414914 (20.4 MB)

lo Link encap:Local Loopback lo链接封装:本地环回

On accessing 172.17.42.1:5000 and 192.168.65.27:5000 in browser on ubuntu host shows waiting for a long time but finally it doesnt connect. 在ubuntu主机上的浏览器中访问172.17.42.1:5000和192.168.65.27:5000时显示等待很长时间但最后它没有连接。

I refered to this post, but my vagrant dont have entries mentioned as per the post. 我参考了这篇文章,但我的流浪者没有根据帖子提到的条目。

My vagrant file is as below 我的流浪文件如下

# -*- mode: ruby -*-
# # vi: set ft=ruby :

require 'fileutils'

Vagrant.require_version ">= 1.6.0"

CLOUD_CONFIG_PATH = File.join(File.dirname(__FILE__), "user-data")
CONFIG = File.join(File.dirname(__FILE__), "config.rb")

# Defaults for config options defined in CONFIG
$num_instances = 1
$update_channel = "alpha"
$enable_serial_logging = false
$vb_gui = false
$vb_memory = 1024
$vb_cpus = 1

# Attempt to apply the deprecated environment variable NUM_INSTANCES to
# $num_instances while allowing config.rb to override it
if ENV["NUM_INSTANCES"].to_i > 0 && ENV["NUM_INSTANCES"]
  $num_instances = ENV["NUM_INSTANCES"].to_i
end

if File.exist?(CONFIG)
  require CONFIG
end

Vagrant.configure("2") do |config|
  # always use Vagrants insecure key
  config.ssh.insert_key = false

  config.vm.box = "coreos-%s" % $update_channel
  config.vm.box_version = ">= 308.0.1"
  config.vm.box_url = "http://%s.release.core-os.net/amd64-      
usr/current/coreos_production_vagrant.json" % $update_channel

  config.vm.provider :vmware_fusion do |vb, override|
    override.vm.box_url = "http://%s.release.core-os.net/amd64-  
usr/current/coreos_production_vagrant_vmware_fusion.json" % $update_channel
  end

  config.vm.provider :virtualbox do |v|
    # On VirtualBox, we don't have guest additions or a functional vboxsf
    # in CoreOS, so tell Vagrant that so it can be smarter.
    v.check_guest_additions = false
    v.functional_vboxsf     = false
  end

  # plugin conflict
  if Vagrant.has_plugin?("vagrant-vbguest") then
    config.vbguest.auto_update = false
  end

  (1..$num_instances).each do |i|
    config.vm.define vm_name = "core-%02d" % i do |config|
      config.vm.hostname = vm_name

      if $enable_serial_logging
        logdir = File.join(File.dirname(__FILE__), "log")
        FileUtils.mkdir_p(logdir)

        serialFile = File.join(logdir, "%s-serial.txt" % vm_name)
        FileUtils.touch(serialFile)

        config.vm.provider :vmware_fusion do |v, override|
          v.vmx["serial0.present"] = "TRUE"
          v.vmx["serial0.fileType"] = "file"
          v.vmx["serial0.fileName"] = serialFile
          v.vmx["serial0.tryNoRxLoss"] = "FALSE"
        end

        config.vm.provider :virtualbox do |vb, override|
          vb.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"]
          vb.customize ["modifyvm", :id, "--uartmode1", serialFile]
        end
      end

      if $expose_docker_tcp
        config.vm.network "forwarded_port", guest: 2375, host: ($expose_docker_tcp + i -     
1), auto_correct: true
      end

      config.vm.provider :vmware_fusion do |vb|
        vb.gui = $vb_gui
      end

      config.vm.provider :virtualbox do |vb|
        vb.gui = $vb_gui
        vb.memory = $vb_memory
        vb.cpus = $vb_cpus
      end

      ip = "172.17.8.#{i+100}"
      config.vm.network :private_network, ip: ip

      # Uncomment below to enable NFS for sharing the host machine into the coreos-vagrant VM.
      #config.vm.synced_folder ".", "/home/core/share", id: "core", :nfs => true, :mount_options => ['nolock,vers=3,udp']

      if File.exist?(CLOUD_CONFIG_PATH)
         config.vm.provision :file, :source => "#{CLOUD_CONFIG_PATH}", :destination =>     "/tmp/vagrantfile-user-data"
        config.vm.provision :shell, :inline => "mv /tmp/vagrantfile-user-data /var/lib/coreos-vagrant/", :privileged => true
      end

    end
  end
end

How to run docker-registry on coreos-vagrant and connect to it using browser running on host machine? 如何在coreos-vagrant上运行docker-registry并使用在主机上运行的浏览器连接到它?

I can see two issues with what you're trying to do. 我可以看到你正在尝试做的两个问题。

  1. You are having trouble accessing docker containers running in a Vagrant VM from your host OS. 您无法从主机操作系统访问在Vagrant VM中运行的docker容器。
  2. You are looking for a web UI for administration of your private docker registry, but the docker image I think you are running (library/registry) does not provide this. 您正在寻找用于管理私有docker注册表的Web UI,但我认为您正在运行的docker镜像(库/注册表)不提供此功能。

Item 1: Please note that the private docker registry you are running does not provide an admin web UI. 第1项:请注意,您运行的私有docker注册表未提供管理Web UI。 The service it's providing on port 5000 is not a website; 它在端口5000上提供的服务不是网站; it is for use by command line docker for pushing and pulling images in your private registry. 它由命令行docker用于在私有注册表中推送和提取图像。 If you need an admin web UI you might consider running an additional service such as https://github.com/atc-/docker-registry-web (which I have not tried but looks promising). 如果您需要管理员Web UI,您可以考虑运行其他服务,例如https://github.com/atc-/docker-registry-web (我没有尝试但看起来很有希望)。

Item 2: If you want to access ports of a Vagrant-VM-hosted docker container from your Vagrant VM's host OS (presumably Windows or OSX, since if your host OS were Linux you probably wouldn't need Vagrant) then I recommend that you open an ssh tunnel to your CoreOS Vagrant VM, forwarding the docker registry port to your local host: 第2项:如果您想从Vagrant VM的主机操作系统访问Vagrant-VM托管的docker容器的端口 (可能是Windows或OSX,因为如果您的主机操作系统是Linux,您可能不需要Vagrant)那么我建议您打开到CoreOS Vagrant VM 的ssh隧道 ,将docker注册表端口转发到本地主机:

vagrant ssh -L5000:localhost:5000 -L8080:localhost:8080 -L80:localhost:80

And leave that ssh session open as long as you need network access to those docker containers' ports. 只要您需要对这些docker容器的端口进行网络访问,请保持ssh会话处于打开状态。

While these port forwarding tunnels are open, the ports you forwarded will be available on localhost (ie 127.0.0.1). 虽然这些端口转发隧道是打开的,但您转发的端口将在localhost (即127.0.0.1)上可用。 You need not access them via some other IP address as you tried before. 您无需像之前尝试过的那样通过其他IP地址访问它们。 This would allow you to access, for example, a web server running in a docker container by visiting http://localhost/ or an application server running on port 8080 by visiting http://localhost:8080/ with a browser or other HTTP client such as curl. 这将允许您通过访问http:// localhost /或在端口8080上运行的应用程序服务器访问http:// localhost:8080 /并使用浏览器或其他HTTP来访问在docker容器中运行的Web服务器客户如curl。 Port 5000 is probably useless in this context, because the docker command line utilities that can access the registry don't currently run natively on Windows or OSX. 端口5000在此上下文中可能无用,因为可以访问注册表的docker命令行实用程序当前不在Windows或OSX上本机运行。 To use your private docker registry, run something like this on your CoreOS Vagrant VM: 要使用私有docker注册表,请在CoreOS Vagrant VM上运行以下内容:

docker tag eb62f9df0657 localhost:5000/myimage
docker push localhost:5000/myimage

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM