Docker运行React应用时sudo未找到的权限问题求助
问题描述
尝试在Docker容器中运行本地开发环境的React应用时,遇到以下错误:
Attaching to my-app_c my-app_c | my-app_c | > my-app@0.1.0 start my-app_c | > sudo PORT=80 react-scripts start my-app_c | my-app_c | sh: sudo: not found my-app_c exited with code 127
尝试执行docker exec -u root -t -i container_id /bin/bash解决权限问题,却触发新错误:
Error response from daemon: Container bad3f69996f3814078d1ed94d3d261e3ffea2ab6a95f7151f576115fa6854f72 is not running
陷入矛盾:容器未运行时无法赋予root权限,而容器需要sudo才能启动。
补充配置文件:
Dockerfile
FROM node:17-alpine WORKDIR /my-app COPY package.json . RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]
docker-compose.yaml
version: "3.8" services: my-app: build: ./my-app container_name: my-app_c ports: - '3000:3000' stdin_open: true tty: true
解决方案
1. 移除启动命令中的sudo
- Docker容器默认以
root用户运行(除非Dockerfile指定了其他用户),完全不需要sudo。 - 修改项目根目录
package.json里的start脚本,去掉sudo:
若要保持和docker-compose映射的3000端口一致,直接改为:"scripts": { "start": "PORT=80 react-scripts start" }"scripts": { "start": "react-scripts start" }
2. 调整端口映射(可选)
如果坚持使用80端口:
- 保持
package.json的start脚本为PORT=80 react-scripts start - 更新
docker-compose.yaml的端口映射为- '80:80',同时将Dockerfile的EXPOSE改为80
3. 重新构建并启动容器
执行以下命令:
docker-compose down docker-compose build docker-compose up
额外说明
- 容器未运行时确实无法使用
docker exec,必须先解决启动失败的根源(此处为sudo不存在且完全不必要),让容器能正常启动。 - Alpine镜像默认未安装
sudo,且即使安装也没有意义——容器内默认就是root权限,无需sudo操作。
内容的提问来源于stack exchange,提问作者jbuddy_13
相关产品推荐
相关产品推荐

