2014-11-22 8 views
13

Bir Mac kullanıyorum ve docker konteynerinde emacs çalıştırmak istiyorum. Bunu çözmek için tercih edilen bir yolu var mı? EKRAN/DÖNEM ben tset için ne kullanmalıyımBir docker kabında emacs çalıştırma

> docker exec -it c6a7a76db84c bash 
> sudo apt-get install emacs 
... 
> [email protected]:/var/log/apache2# emacs 
Please set the environment variable DISPLAY or TERM (see `tset'). 
> [email protected]:/var/log/apache2# tset 
tset: unknown terminal type unknown 
Terminal type? 

ayarlanmadığı için, benim akışında ben StuC olsun? Ya da bir docker kabında emacs çalıştırmak için tercih edilen bir yolu var mı?

+0

Bu gerçekten iyi bir fikir değil. Konteynerler, etkileşimli uygulamalar değil, hizmetler için iyi çalışır. Tüm giriş ve çıkışlar işlemden (emacs) bir Docker CLI'ye Docker CLI'sı üzerinden bir http kanalı üzerinden çoğaltılır. – Bryan

+0

Boot2Docker kullanıyor musunuz? Emacs bu şekilde çalıştırarak ne elde etmeye çalışıyorsunuz? – Bryan

+0

Teşekkürler @bryan. Codebase'in geliştirilmesine yardımcı olmak için Docker örneği tarafından kontrol edilen kodun bir kısmını düzenlemek istiyorum. Örneğin Docker komutu "git clone repo ..." ve klonlanan dosyaları düzenlemek istiyorum. –

cevap

8

Kapsayıcı içindeki dosyaları düzenlemek için Bryan'ın önerdiği gibi ana bilgisayardaki düzenleyicileri ve düzenleyicileri kullanmak genellikle en iyisidir. Aslında, kapsayıcı kaldırıldığında değişiklikleriniz kaybolacağından birimde olmayan bir dosyayı hiçbir zaman düzenlememelisiniz.

Ancak, kapsayıcılar içindeki düzenleyicileri ve GUI uygulamalarını çalıştırmak oldukça olası ve kullanışlıdır. emacs'ın komut satırı sürümünü çalıştırmak için, yapmam gereken tüm idi:

$ docker run -it debian /bin/bash 
[email protected]:/# apt-get update && apt-get install -y emacs23-nox 
[email protected]:/# emacs 

Ben boot2docker ve liman işçilerinin Linux'ta çalışan bu test ettik. Bence senin problemin, emacs'in bir XServer çalışan olmadığı için varsayılan olarak çalışmayacak olan emacs X sürümünü başlatmaya çalışmasıydı.

Bir kabın içine bir GUI uygulaması çalıştırmak isterseniz, bir kaç seçenek var:

  • Kullanım VNC veya X yönlendirme yapmak benzer
  • Kullanım ssh -X (bir xserver gerektirir gibi xquartz)
  • Dağı kabın (iç xsocket yine xserver gerektirir ve bunu XQuartz nasıl çalıştığı emin değilim, aynı zamanda xsocket açığa bazı güvenlik sorunları)
vardırLütfen konteynerlerin etkileşimli uygulamalar için kullanılmaması gerektiğini düşünmeyin. Güvenlik dahil olmak üzere pek çok neden var. subuser project, Docker'ı etkileşimli uygulamaları çalıştırmak için kullanır ve bunun neden iyi bir fikir olabileceğiyle ilgili ayrıntılara girer.

export TERM=xterm 

ve sen hep önceki satıra geçmek için çift girmek Cp gerekecek olsa da, emacs'ı (not çalıştırmak mümkün olacak:

+0

Teşekkürler! Örneğinizde yeni konteyner adı 'debian'? Ya da özel bir şey? Çünkü yaptığınız şeyi takip ettiğimde, emacs yüklenir. Ama eğer mevcut bir kapsayıcıya eklerseniz (docker exec -it 0248677d59c2/bin/bash), yüklemek için emacs paketini bulamıyor –

+0

'debian' kullandığımız resmin adıdır. Ubuntu'yu kullanıyor olabilirsiniz. 'Apt-get update' çalıştırdınız mı? –

+0

Eş-güncelleme güncellemeyi çalıştırdım. Docker dosyası 'FROM debian: jessie' ile başlar, bu yüzden ben onun ubuntu –

1

Kapsayıcıyı bir kapsayıcıda çalıştırmak gerçekten iyi bir fikir değil. Konteynerler, etkileşimli uygulamalar değil, hizmetler için iyi çalışır. Eğer denerseniz, tüm giriş ve çıkışlar bir emriyle (emacs) Docker CLI'sine Docker CLI'sı üzerinden bir http kanalı üzerinden çoğaltılır. Ayrıca düzenlemekte olduğunuz dosyalar, kapsayıcı katmanlı dosya sistemindeyse, bu da ek yükü ekler. Ayrıca bir kap içine kendi ana bilgisayardan bir dizin monte edebilirsiniz

:

Docker say gibi, hacimler daha iyi bir seçenektir.

$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 

Bu

/opt/Webapp dizini olarak kabın içine yerel dizin,/src/webapp, monte edecek. Bu test için çok kullanışlıdır, örneğin kaynak kodumuzu kabın içine monte edebiliriz ve kaynak kodunu değiştirdiğimizde işyerindeki uygulamayı görebiliriz. -v anahtarı da dış Mac'ten çalışacak as from Docker 1.3 o

Not.

+1

Etkileşimli uygulamalar için kapsayıcıları kullanarak sorunu gerçekten görmüyorum ve düzenli olarak bunu kendim yapıyorum. –

+0

Üzgünüz, etkileşimli uygulamalar hakkındaki ifadeye katılmama rağmen cilt kullanma konusunda doğru noktanız olmamalıdır. Görünüşe göre şimdi değiştiremiyorum! –

+0

Ben o kadar aptal değilim;) Mesajı düzenleyene kadar oyumu değiştiremedim. –

9

Adrian Mouat in his comment belirtildiği gibi, sadece yap çünkü Docker).

+0

bu benim için çalıştı ve emacs23-nox –

+1

yapmadı Docker'da yaptığım bir başka şey daha çok yakın zamanda masaüstümde emacs olarak düzenleniyor, tüm dosyayı panoya kopyala ve sonra da do 'cat> dosyasına kopyala. txt 'panoya yapıştırın ve Ctrl + D girin. – metakermit

+0

Doğru cevap budur. Diğer tüm cevaplar haklıdır '/ dev/null' – nottinhill