Apakah ada cara untuk memulai shell interaktif dalam wadah menggunakan Docker Compose saja? Saya sudah mencoba sesuatu seperti ini, di docker-compose.yml saya:
myapp:
image: alpine:latest
entrypoint: /bin/sh
Ketika saya memulai wadah ini dengan menggunakan docker-compose up, ia segera keluar. Apakah ada flag yang bisa saya tambahkan ke perintah entrypoint, atau sebagai dan opsi tambahan untuk myapp, untuk memulai sebagai shell interaktif?
Saya tahu ada opsi perintah buruh pelabuhan asli untuk mencapai ini, hanya ingin tahu apakah mungkin menggunakan Docker Compose juga.
/bin/sh
titik masuk di file penulisan Anda, apa yang harus dilakukan?docker-compose run myapp
?docker-compose run myapp
itu tidak akan mengekspos port. Jadi Anda harus menggunakandocker-compose run --service-ports myapp
tetapi tetap saja tidak nyaman.entrypoint: /bin/sh
harusentrypoint: "/bin/sh"
Jawaban:
Anda perlu memasukkan baris berikut di docker-compose.yml Anda:
Yang pertama sesuai dengan
-i
didocker run
dan yang kedua ke-t
.sumber
stdin_open
adalah tautan yang hilang, untuk sekadar memberi saya perilaku yang diharapkan ketika saya melampirkan ke salah satu wadah saya yang sudah menjalankan shell.docker-compose run <service_name>
docker exec
tidak akan berhasil.colorama\win32.py, line 152, in SetConsoleTitle: ctypes.ArgumentError: ‘ValueError’: embedded null character
Cara kanonik untuk mendapatkan shell interaktif dengan docker-compose adalah dengan menggunakan:
docker-compose run --rm myapp
Anda dapat mengatur
stdin_open: true, tty: true
, namun itu tidak akan benar-benar memberi Anda shell yang tepatup
, karena log sedang dialirkan dari semua wadah.Anda juga bisa menggunakan
untuk mendapatkan shell di wadah berjalan.
sumber
--service-ports
jika Anda mengekspos port apa pun (yaitu untuk server web)--rm
bendera sehingga wadahnya dihapus. Jawaban oleh @ lynx0123 tidak benar. Anda tidak akan mendapatkan shell interaktif jika Anda menjalankandocker-compose up
.docker-compose run
bekerja. Anda juga ingin menambahkancommand: /bin/bash
ke docker-compose.yml.Pada contoh resmi untuk memulai ( https://docs.docker.com/compose/gettingstarted/ ) dengan yang berikut ini
docker-compose.yml
:Setelah Anda mulai dengan ini
docker-compose up
, Anda dapat dengan mudah masuk keredis
wadah Anda atauweb
wadah Anda dengan:sumber
docker-compose run myapp sh
harus melakukan kesepakatan.Ada beberapa kebingungan dengan
up
/run
, tetapidocker-compose run
dokumen memiliki penjelasan yang bagus: https://docs.docker.com/compose/reference/runsumber
Menggunakan docker-compose, saya menemukan cara termudah untuk melakukan ini adalah dengan melakukan
docker ps -a
(setelah memulai wadah saya dengandocker-compose up
) dan mendapatkan ID dari wadah saya ingin memiliki shell interaktif di (sebut saja xyz123).Maka itu masalah sederhana untuk dieksekusi
docker exec -ti xyz123 /bin/bash
dan voila, shell interaktif.
sumber
Jika ada orang dari masa depan juga berkeliaran di sini:
atau
atau Anda dapat menjalankan satu baris seperti
Itu setelah Anda sudah menyiapkan dan menjalankan wadah
sumber
Anda bisa melakukannya
docker-compose exec SERVICE_NAME sh
di baris perintah. TheSERVICE_NAME
didefinisikan dalam Andadocker-compose.yml
. Sebagai contoh,Itu
SERVICE_NAME
akan menjadi "penjaga kebun binatang".sumber
Pertanyaan ini sangat menarik bagi saya karena saya mempunyai masalah, ketika saya menjalankan container setelah eksekusi selesai segera keluar dan saya perbaiki dengan -it:
Dan ketika saya harus mengotomatiskannya dengan menulis buruh pelabuhan:
Ini membuat trik: stdin_open: true, tty: true
Ini adalah proyek yang dibuat dengan create-react-app
Dockerfile.dev terlihat seperti ini:
Semoga contoh ini akan membantu orang lain untuk menjalankan frontend (bereaksi misalnya) ke dalam wadah buruh pelabuhan.
sumber
Jika
yml
dipanggildocker-compose.yml
itu bisa diluncurkan dengan sederhana$ docker-compose up
. Lampiran terminal yang terkait dapat dengan mudah (pertimbangkan bahwayml
telah menentukan layanan yang dipanggilmyservice
):Namun, jika Anda menggunakan
yml
nama file yang berbeda , sepertidocker-compose-mycompose.yml
, itu harus diluncurkan menggunakan$ docker-compose -f docker-compose-mycompose.yml up
. Untuk melampirkan terminal interaktif Anda harus menentukanyml
file juga, seperti:sumber