Docker环境运行React Native Expo不显示二维码问题求助
Docker化Expo项目后无法显示二维码的解决方法
问题背景
本地执行以下命令可正常启动Expo示例应用并显示二维码:
$npx create-expo-app@latest expo-hello-world $cd expo-hello-world/ $npx expo start
但Docker化后执行docker compose up,终端无法显示二维码。使用的配置如下:
Dockerfile
FROM node:23-alpine AS builder WORKDIR /app COPY package.json ./ RUN yarn install COPY . . RUN npx expo install FROM node:23-alpine AS server WORKDIR /app COPY --from=builder /app/ ./ EXPOSE 8081 CMD ["npx", "expo", "start", "-c", "--go"]
docker-compose.yml
services: app-expo: build: context: ./ dockerfile: Dockerfile ports: - "8081:8081" environment: - EXPO_PUBLIC_APP_BASE_URL=http://192.186.86.197:8081 networks: - 'app-network' networks: app-network:
.dockerignore
node_modules/ .expo/
核心原因
Expo的start命令默认仅在交互式TTY终端中输出二维码,Docker容器默认以非交互式模式启动,因此不会渲染二维码。另外需要确保Expo服务绑定到容器的所有网络接口,否则外部无法访问。
解决步骤
1. 启用容器的交互式终端
修改docker-compose.yml,添加tty: true和stdin_open: true参数让容器终端变为交互式,同时指定Expo监听所有地址:
services: app-expo: build: context: ./ dockerfile: Dockerfile ports: - "8081:8081" environment: - EXPO_PUBLIC_APP_BASE_URL=http://192.186.86.197:8081 - EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0 networks: - 'app-network' tty: true stdin_open: true networks: app-network:
2. 强制输出二维码或直接显示访问URL
如果不需要交互式终端,可修改Dockerfile的启动命令,强制输出二维码:
CMD ["npx", "expo", "start", "-c", "--go", "--qr"]
或者关闭二维码,直接显示可访问的URL:
CMD ["npx", "expo", "start", "-c", "--go", "--no-qr"]
3. 手动访问应用
即使没有二维码,也可以直接在Expo Go中手动输入http://192.186.86.197:8081加载应用,确保设备和Docker宿主在同一局域网内。
内容的提问来源于stack exchange,提问作者Dan Wilson
相关产品推荐
相关产品推荐

