在Docker中,我們可以透過選擇不同的網路來為容器提供網路連線。令人驚訝的是,即使我們從未明確設置過任何網絡,Docker仍然會為容器分配預設網絡。這個問題困擾著許多開發者,因為他們可能會遇到一些與網路配置相關的問題。在本文中,我們將透過php小編柚子的幫助,詳細解釋為什麼Docker容器會有預設網絡,以及如何在不同網絡之間進行選擇。
我在為 go 服務設定 docker 設定時遇到了麻煩。以下是我的設定概述
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", ], )
我有一個在 http://localhost:8080
上運行的 graphql playgroud (http),儘管端口據稱已公開,但我無法訪問 playground ui。
我想做的是:
rules_docker
放在同一網路上)。 docker exec -it ... /bin/bash
到我的 docker 容器中(這不起作用,因為未安裝 bash,但我不知道如何透過此 container_image 命令安裝 bash)
錯誤如下:oci runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $path: unknown
如果我取得產生的 docker 映像 id 並執行 docker run -p 8080:8080 image_id
,我可以存取 graphql playground,但無法與 mysql 容器通訊
如果我如下更改網路: docker run --network=host -p 8080:8080 image_id
dockerized go 應用程式可以成功與 mysql 容器通信,但隨後 graphql playground 變得無法存取。只有當我維護 --network=bridge
時,graphql 遊樂場才可存取。我不確定為什麼 mysql 也不使用 bridge
,因為我在啟動它時從未指定網路。這就是我獲得 mysql 容器的方式
docker run -p 3306:3306 --name my-db -e MYSQL_ROOT_PASSWORD=testing -d mysql:8.0.31
答案在這裡: 無法使用 go 和 docker 連線到 mysql 伺服器 - 撥號 tcp 127.0.0.1:3306: connect: 連線被拒絕
事實證明我需要使用以下位址實際存取 mysql,因為 mac 上的 docker 使用 linux vm:
docker.for.mac.localhost:3306
以上是docker容器選擇不同的網絡,儘管從未設置過任何網絡的詳細內容。更多資訊請關注PHP中文網其他相關文章!