Saya memiliki alias pesta yang dimuat ke wadah Docker, di /etc/bash.bashrc
. Fungsinya sebagai pintasan ke skrip PHP baris perintah. Ini nyaman, karena siapa pun dapat menggunakan alias itu langsung setelah satu log ke dalam wadah, dengan:
$ docker exec -it my-container bash
Namun, saya juga ingin dapat menggunakan alias ini dalam satu perintah tanpa masuk, seperti:
$ docker exec -it my-container my-alias
Saya telah mencoba variasi yang berbeda, seperti mendefinisikan alias di tempat lain selain /etc/bash.bashrc
, tetapi saya tetap mengalami kesalahan ini:
rpc error: code = 2 desc = kesalahan runtime oci: exec gagal: exec: "my-alias": file yang dapat dieksekusi tidak ditemukan dalam $ PATH
Saran lain yang saya temukan di web tidak melakukan trik, sejauh ini. Siapa saja?
/etc/bash.bashrc
, dan bukan berdasarkan login.profile
.Jawaban:
Itu bukan karena keterbatasan karena alias yang dimaksudkan untuk digunakan secara interaktif. Anda mungkin dapat meretas ini tetapi solusi termudah adalah dengan hanya membuat "alias" Anda menjadi skrip dan letakkan di dalamnya
/bin
.Dockerfile
Maka itu berfungsi seperti yang diharapkan
sumber
Akhirnya saya mengambil pendekatan yang sedikit berbeda, karena saya belum berhasil membuatnya bekerja dengan
bash.bashrc
strategi. @ joat benar, alias mungkin merupakan kombinasi yang tidak menguntungkan dengan eksekusi sebagian dari baris perintah (dengandocker exec
).Pada akhirnya, saya menyuntikkan skrip (dalam kasus saya melalui PHP Composer) ke dalam gambar. Dalam kasus saya dengan memasang direktori lokal saya, meskipun itu tidak masalah. Lalu saya menambahkan path ke skrip ini di saya
Dockerfile
melalui variabel lingkungan:ENV PATH $PATH:./vendor/bin
Ini membuat skrip tersedia secara global saat runtime.
Saya menganggapnya sebagai solusi, masih, jadi tertarik untuk mendengar dari siapa pun yang benar-benar mendapatkan alias reguler untuk bekerja saat
docker exec
runtime.sumber
Saya punya masalah ini dan saya menyelesaikannya dengan membungkus perintah yang ingin saya jalankan di dalam shell sementara, dalam contoh Anda memilikinya akan dilakukan seperti ini:
$ docker exec -it my-container sh -l -c "my-alias"
(
-l
bendera hanya diperlukan jika alias Anda hanya tersedia di shell login, yang merupakan kasus saya)Itu membuatnya lebih verbose, tetapi Anda selalu dapat membuat alias atau fungsi untuk membungkus ini.
sumber
Alias sebagian besar berguna ketika Anda ingin mempersingkat bagian dari perintah yang biasa digunakan yang mengambil argumen variabel. Dalam konteks ruby dev yang mungkin membuat alias
karena siapa yang mau mengetik
bundle exec
sepanjang waktu?Jika yang Anda inginkan adalah versi yang lebih pendek dari perintah yang lebih panjang dengan argumen statis maka Anda harus tetap membuat skrip. Dengan skrip, skrip akan selalu tersedia dan tidak bergantung pada sumber profil tertentu dalam konteks tertentu (yang pada dasarnya tidak dapat Anda andalkan).
Kasus comman yang lebih (seperti itu di atas) adalah ketika Anda menggunakan alias karena Anda ingin argumen string yang mudah ke akhir alias. Misalnya
atau
Dalam kedua kasus, saya tidak ingin harus mengetik lebih dari yang saya butuhkan. Namun, hanya dengan sedikit bash, Anda dapat mencapai hal yang sama dalam solusi yang lebih fleksibel.
Mirip dengan beberapa jawaban di atas, buat file -
/usr/local/bin/be
dalam contoh ini. Ini mengasumsikan bahwa/usr/local/bin
termasuk dalam AndaPATH
.ditindaklanjuti dengan (mungkin dengan
sudo
)Ini sedikit contoh naif, dan mengharuskan keduanya
ruby
danbundler
permata telah diinstal, tetapi hal yang perlu diperhatikan adalah"$@"
yang memungkinkan Anda memasukkan sejumlah variabel argumen ke dalam skrip. Dengan demikian, Anda mendapatkan ergonomi alias, tetapi dengan perintah yang selalu tersedia dan tidak tergantung konteks.Saya menemukan pendekatan ini sangat membantu ketika bekerja dengan wadah. Semoga ini bisa membantu.
sumber
$@
(dan variabel shell lainnya) dalam tanda kutip: yaitubundle exec "$@"
,.