在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。
我想做的是:
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号