Node.js应用Docker化时yarn安装依赖遇DNS解析错误求助
解决Docker构建Node.js应用时Yarn安装依赖失败问题
问题现象
将Node.js应用容器化时,本地执行yarn install一切正常,但通过docker-compose up构建镜像时,执行yarn命令报错,无法解析Yarn仓库地址,具体错误信息如下:
=> ERROR [4/5] RUN yarn 21.3s ------ > [4/5] RUN yarn: #0 0.772 yarn install v1.22.19 #0 0.887 [1/4] Resolving packages... #0 1.074 [2/4] Fetching packages... #0 6.223 error An unexpected error occurred: "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz: getaddrinfo EAI_AGAIN registry.yarnpkg.com". #0 6.223 info If you think this is a bug, please open a bug report with the information provided in "/usr/app/yarn-error.log". #0 6.223 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command. ------ failed to solve: executor failed running [/bin/sh -c yarn]: exit code: 1
已尝试操作
- 移除项目中不必要的依赖包
- 清理本地Node缓存
- 删除本地
node_modules文件夹并重新安装(本地运行无异常)
相关配置文件
Dockerfile
FROM node:16-alpine WORKDIR /usr/app COPY package.json yarn.lock ./ RUN yarn COPY . . EXPOSE 3000 CMD ["yarn", "start"]
docker-compose.yml
version: '1' services: app: container_name: nodejs-backend build: . ports: - "3000:3000" command: yarn start
.dockerignore
node_modules
解决方案
报错getaddrinfo EAI_AGAIN本质是DNS解析失败,可通过以下方法解决:
为容器配置公共DNS服务器
在docker-compose.yml的服务配置中添加DNS参数,指定稳定的公共DNS:version: '1' services: app: container_name: nodejs-backend build: . ports: - "3000:3000" command: yarn start dns: - 8.8.8.8 - 8.8.4.4切换Yarn镜像源为国内源
针对Alpine镜像访问海外仓库慢的问题,在Dockerfile中配置国内Yarn镜像:FROM node:16-alpine WORKDIR /usr/app COPY package.json yarn.lock ./ # 配置国内Yarn镜像 RUN yarn config set registry https://registry.npmmirror.com/ RUN yarn COPY . . EXPOSE 3000 CMD ["yarn", "start"]重启Docker服务
Docker网络组件异常可能导致DNS解析问题,重启Docker即可修复:# Linux系统 sudo systemctl restart docker # Windows/macOS 在Docker Desktop界面点击重启按钮检查宿主机网络连通性
先确认宿主机能正常访问Yarn仓库,执行以下命令验证:ping registry.yarnpkg.com如果宿主机也无法访问,需先排查宿主机的网络连接问题。
内容的提问来源于stack exchange,提问作者Duca
相关产品推荐
相关产品推荐

