Docker部署Go服务遇多问题:网络互通、端口访问及Bash缺失
Go服务Docker配置问题及需求
配置详情
我的Go服务通过rules_docker配置如下:
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", ], )
遇到的问题
GraphQL Playground运行在http://localhost:8080,尽管容器配置中已声明暴露该端口,但无法访问此UI界面。
需求目标
- 能够访问容器内的GraphQL Playground及其他端口上的API
- 实现Docker化的Go应用向独立的MySQL容器发起请求(不清楚如何通过
rules_docker将两者置于同一网络) - 能够通过
docker exec -it ... /bin/bash进入Docker容器(当前容器未安装Bash,且不知道如何通过container_image命令安装),当前报错信息:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
不同启动命令的现象
- 执行
docker run -p 8080:8080 IMAGE_ID:可以访问GraphQL Playground,但无法与MySQL容器通信 - 执行
docker run --network=host -p 8080:8080 IMAGE_ID:Go应用能成功与MySQL容器通信,但GraphQL Playground无法访问 - 仅使用
--network=bridge时能访问Playground,但疑惑MySQL容器启动时未指定网络,为何不在bridge网络中。MySQL容器启动命令如下:
docker run -p 3306:3306 --name my-db -e MYSQL_ROOT_PASSWORD=testing -d mysql:8.0.31
内容的提问来源于stack exchange,提问作者Naji
相关产品推荐
相关产品推荐

