Rumah > pembangunan bahagian belakang > Golang > bekas docker memilih rangkaian yang berbeza walaupun tidak pernah menetapkan sebarang rangkaian

bekas docker memilih rangkaian yang berbeza walaupun tidak pernah menetapkan sebarang rangkaian

PHPz
Lepaskan: 2024-02-09 11:51:17
ke hadapan
554 orang telah melayarinya

bekas docker memilih rangkaian yang berbeza walaupun tidak pernah menetapkan sebarang rangkaian

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.

Kandungan soalan

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",
    ],
)
Salin selepas log masuk

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:

  1. Dapat mengakses taman permainan graphql dan mana-mana api lain yang berjalan pada port lain dalam bekas
  2. Dapat membuat permintaan untuk memisahkan bekas mysql daripada aplikasi go dockerized saya (saya tidak tahu cara meletakkannya pada rangkaian yang sama seperti rules_docker ).
  3. 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
Salin selepas log masuk

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
Salin selepas log masuk

Penyelesaian

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
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan