11

Vagrant 1.6 の Docker プロバイダーを利用しようとしていますが、問題が発生したようです。Docker コンテナーとゲスト OS を正常に立ち上げることができますが、ホスト OS からコンテナー内で立ち上げたサービスにアクセスできません。これが私のVagrantfileです:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.network :forwarded_port, guest: 8000, host: 8000

  config.vm.define "icecast" do |v|
    v.vm.provider "docker" do |d|
      d.image = "moul/icecast"
      d.ports = ["8000:8000"]

      d.env = {
        # SOURCE_PASSWORD: 'password',
        ADMIN_PASSWORD: 'password',
        # PASSWORD: 'password',
        # RELAY_PASSWORD: 'password'
      }
    end
  end
end

私の理解では、vagrant up --provider=dockerOS X で実行すると、boot2docker を実行している VM が起動し、それがコンテナーを実行します。実行vagrant docker-logsすると、コンテナが作成され、サービスが開始されたことを確認できるようですが、OS X ホストからサービスにアクセスする方法が今のところわかりません。標準の VirtualBox プロバイダーを使用していた場合、ディレクティブが転送を処理することを期待しますconfig.vm.network :forwarded_portが、それを追加しても違いはないようです。

OS X ホストからこのサービスにアクセスできるようにするには、どうすればよいですか?

更新: 参考までに、イメージの Dockerfile は次のとおりです: https://github.com/moul/docker-icecast/blob/master/Dockerfile

4

2 に答える 2

17

わかりましたので、ようやくこれを理解しました。解決策は、boot2docker をまったく使用しないことであることがわかりました。Vagrant のソースを詳しく調べ、問題を読み、Docker プロバイダーの紹介ビデオを再視聴した結果、boot2docker の代わりにプロキシ VM を使用してコンテナーをホストする必要があることがわかりました。

これをセットアップするために、Vagrantfile を変更して、次の構成オプションを含めましたvagrant_vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "icecast" do |v|
    v.vm.provider "docker" do |d|
      d.image = "moul/icecast"
      d.ports = ["8000:8000"]

      d.env = {
        # SOURCE_PASSWORD: 'password',
        ADMIN_PASSWORD: 'password',
        # PASSWORD: 'password',
        # RELAY_PASSWORD: 'password'
      }

      d.vagrant_vagrantfile = "./Vagrantfile.proxy"
    end
  end
end

次に、Vagrant がプロキシ VM を起動するために使用する追加のファイル (Vagrantfile.proxy) を追加しました。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "docker"
  config.vm.provision "shell", inline:
    "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"

  config.vm.network :forwarded_port, guest: 8000, host: 8000
end

Docker プロビジョナーを使用すると、プロキシ VM に Docker が自動的にインストールされます。インライン シェル スクリプトは、インストール後に Docker を利用できるように、Vagrant を強制的にボックスにログインさせます。最後に、オリジナルとは対照的に、この Vagrantfile で必要なポートを転送します (オリジナルではportsconfig オプションを使用します)。

デフォルトの boot2docker 戦略と同様に、Vagrant はプロキシ VM の既存のインスタンスをそれを利用するイメージに再利用するのに十分スマートです。

うまくいけば、これは将来誰かに役立つでしょう。

于 2014-06-01T21:12:51.950 に答える
2

boot2docker からポートを転送するには (boot2docker を使用していないカスタム プロキシ VM からポートを転送するのではなく)、VirtualBox を介して手動でポート転送を追加するか、実行後に次のスクリプトを実行する必要がありますvagrant up

export PORT=3306
export REASON=mysql
export HOST_VM=`VBoxManage list runningvms | grep docker-host | awk '{ print $1 }' | sed 's/"//g'`
VBoxManage controlvm $HOST_VM natpf1 "docker-$REASON-$PORT-port-forward,tcp,127.0.0.1,$PORT,,$PORT"
于 2014-06-18T14:09:49.333 に答える