Dalam beberapa tahun kebelakangan ini, Docker telah menjadi semakin popular sebagai penyelesaian kontena yang cekap. Walau bagaimanapun, terdapat juga beberapa masalah yang dihadapi semasa menggunakan Docker untuk penggunaan kontena Contohnya, apabila mengakses mesin hos dari dalam bekas, bekas akan melaporkan ralat menggunakan Docker hos. Artikel ini menerangkan punca masalah ini dan cara membetulkannya.
Apabila menggunakan Docker untuk menggunakan aplikasi, kadangkala anda perlu mengakses sistem fail hos atau daemon Docker hos dari dalam bekas. Biasanya, ini dicapai dengan menambahkan parameter -v /:/host
dan -v /var/run/docker.sock:/var/run/docker.sock
apabila memulakan bekas. Walau bagaimanapun, dalam beberapa kes, apabila kontena cuba mengakses daemon Docker hos, mesej ralat yang serupa dengan yang berikut akan muncul:
FATA[0000] Post http:///var/run/docker.sock/v1.18/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
Ini kerana proses dalam kontena akan mula-mula cuba mencari dalam direktori /var/run/docker.sock
di dalam bekas, tetapi direktori ini tidak wujud di dalam bekas, jadi ralat ini akan berlaku.
--privileged
Apabila memulakan bekas, gunakan parameter --privileged
untuk memberikan bekas semua kebenaran hos, termasuk akses daemon Docker. Walau bagaimanapun, menggunakan kaedah ini akan membolehkan bekas mendapatkan kebenaran yang lebih tinggi dan menimbulkan risiko keselamatan yang lebih besar, jadi disyorkan untuk menggunakannya dengan berhati-hati.
docker run --privileged -v /:/host -v /var/run/docker.sock:/var/run/docker.sock <image>
Apabila memulakan bekas, anda boleh menggunakan pembolehubah persekitaran untuk menentukan alamat daemon Docker, dengan itu menghalang bekas daripada mencari daemon Docker proses pada /var/run/docker.sock
.
docker run -v /:/host -e DOCKER_HOST=unix:///host/var/run/docker.sock <image>
Menggunakan sambungan TCP dan bukannya Unix Socket juga boleh menyelesaikan masalah ini. Anda perlu menambah parameter -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
apabila memulakan daemon Docker, dan kemudian gunakan pembolehubah persekitaran DOCKER_HOST
dalam bekas untuk menentukan penggunaan TCP untuk menyambung kepada daemon Docker.
docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock docker run -e DOCKER_HOST=172.xx.xx.xx:2375 <image>
Ralat yang dilaporkan apabila bekas menggunakan hos Docker disebabkan oleh masalah laluan apabila proses dalam bekas sedang mencari proses daemon Docker. Artikel ini memperkenalkan tiga penyelesaian: menggunakan parameter --privileged
, menggunakan pembolehubah persekitaran dan menukar kaedah sambungan daemon Docker. Masalah ini boleh diselesaikan dengan mudah dengan memilih kaedah yang sesuai mengikut situasi sebenar.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat apabila bekas menggunakan docker hos. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!