使用docker-compose启动容器后,主机无法访问容器内服务
问题解决:Docker Compose端口映射失效的原因与修复
问题根源
docker-compose run命令默认不会加载docker-compose.yml中定义的ports端口映射配置——它的设计初衷是临时运行服务、执行一次性命令,默认不绑定端口到主机,这就是你启动Rails服务器后主机无法访问的原因。
修复方案
方案1:保留交互模式,启用服务端口映射
执行docker-compose run时添加--service-ports参数,强制加载配置中的端口映射规则:
docker-compose run --service-ports some_app
进入容器终端后执行rails s -b 0.0.0.0,主机即可通过localhost:3000正常访问应用。
方案2:改用docker-compose up启动(更符合Compose常规用法)
修改你的docker-compose.yml,添加command指令让容器启动时自动启动Rails服务器:
services: some_app: build: . ports: - "3000:3000" - "3306:3306" stdin_open: true tty: true command: ["rails", "s", "-b", "0.0.0.0"]
然后执行启动命令:
docker-compose up --build
容器启动后会自动运行Rails服务器,无需手动进入终端执行命令,主机直接访问localhost:3000即可。
如果不想修改配置文件,也可以临时指定启动命令:
docker-compose up --build --command "rails s -b 0.0.0.0" some_app
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

