You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:33:21