Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
PHPzke hadapan
2024-02-09 11:51:17495semak imbas

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",
    ],
)

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

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

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

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam