在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中文网其他相关文章!