Docker daemon, CoreOS'ta açılışta başlamıyor


23

Ben CoreOS (835.9.0) bir vanilya kurulumum var ve başlangıçta liman işçisi arka plan başlatmıyor. Sadece SSH girip yaptığımda başlar docker ps.

Liman işçisi arka planının otomatik olarak sistem önyüklemesinde başlatılmasını nasıl sağlayabilirim?

Docker daemon dediğimde, demek istediğim ps -ef | grep dockerkadar süreç göstermiyordocker ps

Yanıtlar:


40

sudo systemctl enable docker hile yaptım.


2
Teşekkürler ve Docker belgelerini okudum ve yardımcı olacak bir şey bulamadım - yeniden başlatma politikaları hakkında çok şey buldum, ancak tabii ki sadece docker cini başladığında uygulanır.
Chris

6
Arkaplan: Bunun kökeni, çekirdeğin CoreOS'ta aktif hale getirilmiş olmasıdır, yani önyükleme zincirini engellemez. Docker'ın ilk sürümlerinde, diskte docker'a bağımlı olan her şeyin hızlı bir şekilde başlatılmasını engelleyen ve bazı ilginç hatalara neden olan çok sayıda kap bulunduğunuzda başlaması yavaştı.
Rob,

4
İyilik. Bu beni deli etti. Bu belgelerin hiçbirinde okuduğum hiçbir şey. CoreOS'u AWS AMI lehine yemin ediyordum. (AWS AMI Docker arka planını otomatik olarak başlatır).
Nostalg.io

2
CoreOS'un bu şekilde davranması çok olağandışı, CoreOS'un özel bir Docker İşletim Sistemi olduğu ve açılış sırasında docker başlatılmadığı göz önüne alındığında ???
typelogic

3
Bu ciddi bir bilgidir. CoreOS dokümanları Docker'ı (veya bu konuda herhangi bir başka konteyner çalışma zamanını) etkinleştirme zorunluluğundan bahsetmiyor. Docker konteynerlerini çıplak CoreOS'ta başlatmak mümkün olduğundan (ve CoreOS konteynerleri çalıştırmak için yapıldığından), varsayılan olarak izlenimdeydim. Hatamı ancak ilk güncelleme ile yeniden başlatılan yeniden başlatma konteynerlerimi başlatmadığında fark ettim.
Florian von Stosch

6

Bu şimdi biraz eski, ama bunu tüm yeni sunucularda yapmak için cloud-init kullanmaya başladım. Tüm sunucularım için kullandığım kaydedilmiş bir bulut içi komut dosyası var. Bir kısmı:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

Bu, liman servisini etkinleştirecek ve ilk ve her açılışta başlatacak.


2

Bu yorumda Rob tarafından daha önce açıklandığı gibi , liman işçisi soket etkindir. Deamon, çağrılmadıkça başlamaz demek oluyor. Buradaki mevcut cevaplar işe yarar, ancak CoreOS farklı bir yaklaşım önerir.

CoreOS belgelerine göre, bunu yapmanın önerilen yolu Docker hizmetini gerektiren kendi uygulamanız için bir hizmet oluşturmaktır:

/etc/systemd/system/myapp.service:

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"

[Install]
WantedBy=multi-user.target

Bunun yerine o hizmetin otomatik olarak başlatılmasını sağlayın:

$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service

Örnek kullanım örneği, servis başladıktan sonra kabı en son sürüme güncellemektir ve ileri düzey örnek servisi etcd dosyasına kaydeder. Daha fazla arka plan bilgisi için CoreOS belgelerini okuyun .


CoreOS'tan "en son" bu mu? Docker, yıllarca yeniden başlatma politikalarına sahip ve bu yaklaşım artık gerekli değil veya istenmiyor. Asla istenen bir şey değildi, ancak Docker'ın konteynerlerin yeniden başlatılması için destek vermemesi (çok eski sürümleri) için bir geçici çözümdü. Uzun geçmiş zaman, galiba ... CoreOS kullanarak durdurmaya
Michael Hampton

@MichaelHampton Yeniden başlatma ilkeleri, kap başka bir nedenden ötürü çöktüğünde de geçerlidir, bu nedenle biri bir başkasının yerine geçmez. Ayrıca, yeniden başlatma politikaları, önyükleme sırasında kapları güncellemenize izin vermez. Daha iyi olan hiçbir fikrim yok, ancak bu yöntemin size biraz daha kontrol sağladığını düşünüyorum.
Neograph734

1
Bu kadar kontrole ihtiyaç duymaya başladığınızda, aynı zamanda genel olarak orkestrasyon hizmetleri tarafından sağlanan diğer birçok bit'e de ihtiyacınız var: basit liman işçisi-oluşturucu, Kubernet'lere kadar.
Michael Hampton

1

Docker Swarm kullanıyorum, bu yüzden sorumlu olacağım systemd için belirli bir uygulama yok ... Sadece açılışta docker gerekir. Çözdüğüm çözüm bu.

Şunu koy /etc/systemd/system/poke-docker.service:

[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target

Ve daha sonra systemctl enable poke-dockerher açılışta tetiklenecek şekilde ayarlamak için, başlangıç ​​sırasının sonuna yakın. docker versionKomut soketi tetikleme ve liman işçilerinin hizmetini kendisi başlayarak liman işçisi cini ile konuşur.

systemctl enable dockerPüf noktasını diğer cevabında denedim ve ilk başta çalıştığı sırada, docker'ın görünüşte çok şey yapmaya çalıştığı ve sefilce başarısız olduğu bir tür fırtınalı bir duruma neden olmuş gibi görünüyor. Buradaki yorumlarda belirtilen "bot zincirini engelleme" davranışı olduğundan şüpheleniyorum.


Bir sürüde gitlab koşucusu çalıştıran aynı kullanım durum vardı. Bu kesinlikle artalanı uyandırır. Sen systemd damla-daki ateşleme dosyası ekleyebilirsiniz coreos.com/os/docs/latest/using-systemd-drop-in-units.html
drgn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.