EDIT:Saya telah belajar banyak tentang Docker sejak memposting jawaban ini. "Memulai layanan secara otomatis dalam wadah Docker" bukanlah pola penggunaan yang baik untuk Docker. Sebagai gantinya, gunakan sesuatu seperti armada, Kubernetes, atau bahkan Monit/SystemD/Upstart/Init.d/Cron untuk secara otomatis memulai layanan yang dijalankan di dalam container Docker.
JAWABAN ASLI:Jika Anda memulai wadah dengan perintah /bin/bash
, maka Anda dapat melakukannya dengan cara yang diuraikan di sini:https://stackoverflow.com/a/19872810/2971199
Jadi, jika Anda memulai wadah dengan docker run -i -t IMAGE /bin/bash
dan jika Anda ingin memulai apache2 secara otomatis saat penampung dimulai, edit /etc/bash.bashrc
dalam wadah dan tambahkan /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf
(atau apa pun perintah start apache2 Anda) ke baris baru di akhir file.
Simpan perubahan pada gambar Anda dan mulai ulang dengan docker run -i -t IMAGE /bin/bash
dan Anda akan menemukan apache2 berjalan saat Anda memasang.
Saya kira Anda tidak bisa. Yang dapat Anda lakukan adalah membuat gambar menggunakan Dockerfile dan menentukan CMD di dalamnya, yang akan dijalankan saat wadah dimulai. Lihat dokumentasi pembuat untuk mengetahui dasar-dasarnya (https://docs.docker.com/reference/builder/) dan lihat Jalankan layanan secara otomatis dalam wadah buruh pelabuhan untuk informasi tentang menjaga agar layanan Anda tetap berjalan.
Anda tidak perlu mengotomatiskan ini menggunakan Dockerfile. Anda juga dapat membuat gambar melalui komit manual seperti yang Anda lakukan, dan menjalankannya dengan baris perintah. Kemudian, Anda memberikan perintah yang harus dijalankan (yang sebenarnya dilakukan oleh CMD Dockerfile). Anda juga dapat mengganti CMD Dockerfiles dengan cara ini:hanya CMD terbaru yang akan dieksekusi, yang merupakan perintah baris perintah jika Anda memulai wadah menggunakan satu. docker run -i -t base /bin/bash
dasar perintah dari dokumentasi adalah contohnya. Jika perintah Anda terlalu panjang, tentu saja Anda dapat membuat skrip praktis.
Opsi yang dapat Anda gunakan adalah menggunakan manajer proses seperti Supervisord untuk menjalankan banyak proses. Seseorang menyelesaikan ini dengan sshd dan mongodb:https://github.com/justone/docker-mongodb