2016-10-14 48 views
9

Docker-compose ile docker'ı başlatma ile ilgili sorunlarım var. Ben hatayı>

Building postgres 
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`. 

aşağıdaki docker-compose -f dev.yml build çalıştırdığınızda ben docker-machine ls makineyi çalıştırırsanız

Ancak docker-compose -f dev.yml build başarıyla tamamlar bundan sonra eval "$(docker-machine env default)" çalıştırarak hata sabit açıkça yukarı>

NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS 
default -  virtualbox Running tcp://192.168.99.100:2376   v1.12.1 

olduğunu.

Sorgunuz neden bu işe yaradı, aslında ne oluyor ve nasıl geri alabilirim?

Bu, bunu düzeltmenin güvenli bir yolu mu? Şu anda bu sadece benim laptop, ama bu konteynerler yakın gelecekte şirket sunucularını vurmak gerekiyor.

ben bash ile süper akıcı değilim ama hep olmuştur eval aday olmamaya ve özellikle bu doğal Docker desteklemeyen bir makinede Docker kullanmak beklenen yolu gerçekten

cevap

16

docker komutlarını çalıştırdığınızda, CLI Docker uygulamasının API'sine bağlanır ve aslında bu işi gerçekten yapan API'dir. Uzak Docker ana bilgisayarlarını yerel CLI'nızdan yöneterek API bağlantı ayrıntılarını değiştirerek, Docker'ın CLI'nin çalıştığı istemcide ortam değişkenlerini depolamasını sağlayabilirsiniz.

Docker Makine ile Docker motorunuz, uzaktaki bir makine olan bir VM'de çalışır; bu nedenle yerel CLI'nız buna bağlanmak üzere yapılandırılmalıdır. Docker Machine, yönettiği motorlar için bağlantı ayrıntılarını bilir, bu nedenle docker-machine env default'un çalıştırılması, default makinesinin ayrıntılarını yazdırır. bunun yerine sadece konsola bunları yazma,

$ docker-machine env default 
export DOCKER_TLS_VERIFY="1" 
export DOCKER_HOST="tcp://172.16.62.130:2376" 
export DOCKER_CERT_PATH="/Users/elton/.docker/machine/machines/default" 
export DOCKER_MACHINE_NAME="default" 

kullanma eval bu export komutların her yürütür, bu nedenle çevre değişkenleri kurma hızlı bir yoldur: çıktı böyle bir şeydir. Yerel ortamı sıfırladığınızda ve çevreyi sıfırlamak için çıkış sağlayan docker-machine env --unset ile yerel ortamı sıfırlayabilirsiniz (böylece CLI yerel Docker Motoruna bağlanmaya çalışır).

+0

Ah, bu hakkı anladım, bu docker komutu olmadan, docker VM'ye açık SSH oturumu olsaydı gerçekten işe yarayacaktı? –

+0

Evet, VM'ye SSH eklerseniz ve 'docker' komutlarını çalıştırırsanız, yerel Docker Engine'e karşı çalışırlar. Ortam değişkenlerini uzak bir Docker Engine - Docker Machine ile çalışmak için kullanabilirsiniz, sadece daha kolay hale getirir ve bağlantıyı güvenceye alır. –

3

olan "ile eval aday olmamaya anlattı

: https://docs.docker.com/machine/get-started/ bu adım ne yapar

(Ben de kendiniz deneyin öneririz): Windows veya Mac OS X'te örneğin

Docker dokümantasyon burada Docker Machine kullanarak verdiği açıklamasında bu adımı içerir

  • Çalıştır docker-machine env default.
  • Bu komutun çıktısını alın ve geçerli kabuk oturumunda yürütün. Eğer docker-machine env default kendini çalıştırırsanız

, bunu basitçe Docker VM Docker deamonuyla bulmak için komutları veren bazı çevre değişkenleri, ayarlamak anlaşılacağı göreceksiniz. Bu değişkenler set edilmeden Docker, Docker daemon'la nasıl iletişim kuracağını bilmez.

Bir sunucu ortamında (Linux), Linux çekirdeği yerel olarak çalışan kapsayıcıları desteklediğinden Docker Machine'e ihtiyacınız olmayacaktır. Yalnızca çalışan kapsayıcıları desteklemeyen işletim sistemlerinde Docker Machine'e (Linux çekirdeği çalıştıran küçük bir VM) ihtiyacınız var.