Dalam Docker, kami boleh menyediakan sambungan rangkaian kepada bekas dengan memilih rangkaian yang berbeza. Yang menghairankan, Docker masih memberikan rangkaian lalai kepada bekas walaupun kami tidak pernah menetapkan sebarang rangkaian secara eksplisit. Masalah ini mengganggu ramai pembangun kerana mereka mungkin menghadapi beberapa masalah yang berkaitan dengan konfigurasi rangkaian. Dalam artikel ini, kami akan menerangkan secara terperinci mengapa bekas Docker mempunyai rangkaian lalai dan cara memilih antara rangkaian yang berbeza dengan bantuan editor PHP Youzi.
Saya menghadapi masalah menyediakan konfigurasi docker untuk perkhidmatan go. Di bawah ialah gambaran keseluruhan persediaan saya
go_binary( name = "main_arm64", embed = [":server_lib"], goarch = "arm64", goos = "linux", visibility = ["//visibility:public"], ) container_image( name = "ww_server_image", base = "@go_image_static_arm64//image", entrypoint = ["/main_arm64"], files = [":main_arm64"], ports = [ "8080", "3306", ], )
Saya mempunyai graphql playgroud (http) yang dijalankan http://localhost:8080
dan walaupun pelabuhan itu sepatutnya awam, saya tidak boleh mengakses ui taman permainan.
Apa yang saya nak buat ialah:
rules_docker
). docker exec -it ... /bin/bash
ke dalam bekas docker saya (ini tidak berfungsi kerana bash tidak dipasang, tetapi saya tidak tahu cara memasang bash melalui arahan container_image ini)
Kesilapannya adalah seperti berikut: oci runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $path: unknown
Jika saya mendapat id imej docker yang dijana dan dijalankan docker run -p 8080:8080 image_id
Saya boleh mengakses taman permainan graphql tetapi tidak boleh berkomunikasi dengan bekas mysql
Jika saya menukar rangkaian seperti berikut: docker run --network=host -p 8080:8080 image_id
dockerized go 应用程序可以成功与 mysql 容器通信,但随后 graphql playground 变得无法访问。仅当我维护 --network=bridge
时,graphql 游乐场才可访问。我不确定为什么 mysql 也不使用 bridge
kerana saya tidak pernah menyatakan rangkaian semasa memulakannya. Inilah cara saya mendapat bekas mysql
docker run -p 3306:3306 --name my-db -e MYSQL_ROOT_PASSWORD=testing -d mysql:8.0.31
Jawapannya ada di sini: Tidak dapat menyambung ke pelayan mysql menggunakan go dan docker - dail tcp 127.0.0.1:3306: sambung: sambungan ditolak
Ternyata saya perlu benar-benar mengakses mysql menggunakan alamat berikut kerana docker pada mac menggunakan vm linux:
docker.for.mac.localhost:3306
Atas ialah kandungan terperinci bekas docker memilih rangkaian yang berbeza walaupun tidak pernah menetapkan sebarang rangkaian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!