Docker-Compose部署遇host not found及entrypoint.sh错误排查
问题分析与解决方案
错误1:app容器启动失败,提示exec /scripts/entrypoint.sh: no such file or directory
排查方向
- 脚本路径不匹配:Dockerfile或docker-compose中,要么没把脚本复制进镜像,要么本地挂载路径与容器内路径对应错误
- 脚本缺少执行权限:entrypoint.sh没有
x权限,容器无法执行该脚本 - 脚本未被复制到镜像:Dockerfile的COPY/ADD命令写错,未将本地脚本复制到容器指定路径
解决步骤
- 核对Dockerfile:确保存在
COPY entrypoint.sh /scripts/这类命令,将本地脚本准确复制到容器内的/scripts目录 - 添加执行权限:要么在Dockerfile中加入
RUN chmod +x /scripts/entrypoint.sh,要么本地先执行chmod +x entrypoint.sh再构建镜像 - 检查挂载配置:如果使用volume挂载脚本(比如
./scripts:/scripts),确认本地./scripts目录下确实存在entrypoint.sh,路径完全对应
错误2:proxy容器报错nginx: [emerg] host not found in upstream "app"
排查方向
- 核心原因是app容器启动失败,Docker网络中找不到
app服务实例 - 即便配置了
depends_on,它仅控制启动顺序,不会等待app完全就绪,但此处app直接退出,根源还是第一个错误 - proxy与app不在同一Docker网络中,导致无法解析
app主机名
解决步骤
- 先彻底解决第一个错误,确保app容器能正常启动运行
- 配置自定义网络:在docker-compose-deploy.yml中添加自定义网络,让两个服务都加入,示例代码:
networks: app-net: driver: bridge services: app: # 其他配置... networks: - app-net proxy: # 其他配置... networks: - app-net
- 可选优化:给nginx的upstream配置添加重试逻辑,避免偶发就绪延迟,比如:
upstream app { server app:8080 max_fails=3 fail_timeout=30s; }
内容的提问来源于stack exchange,提问作者tgmjack
相关产品推荐
相关产品推荐

