6

我正在尝试对 Expo React Native 应用程序进行 docker 化,以便我的团队合作伙伴中的任何人都可以下载 repo,然后制作一个docker-compose up并且毫不费力地在他们的计算机上运行相同的 expo 服务器。
到目前为止,我可以构建容器,并且它显示的信息与我在计算机上本地运行时显示的信息相同。

在此处输入图像描述

尝试启动 Metro 捆绑器时出现问题,http://localhost:19002无法访问 url。端口 19001 不会发生这种情况,它工作得很好。此外,我尝试用我的 iPhone 设备扫描 QR 码,但它也不起作用,因为我猜没有找到 docker ip。

我无法弄清楚我做错了什么,并且网络上没有太多关于 dockerize expo 的信息。

这些是我的 dockerfile 和 docker-compose.yml

FROM node:latest

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

COPY package*.json /usr/src/app/
COPY app.json /usr/src/app/

RUN npm install -g expo-cli

EXPOSE 19000
EXPOSE 19001
EXPOSE 19002

CMD npm i -f && npm start
version: '3.7' # Specify docker-compose version

# Define the services/containers to be run
services:
   expo: # Name of the frontend service
      container_name: expo-prestadores
      build: ./ # Specify the directory of the Dockerfile
      ports:
         - 19000:19000 # Specify port-forwarding
         - 19001:19001
         - 19002:19002
      volumes: # Mount host path in the container
         - ./:/usr/src/app
         - /usr/src/app/node_modules

4

3 回答 3

5

说得通。Expo DevTools 告诉您它正在localhost您的容器中运行。

这意味着在您的容器中,Expo DevTools 仅适用于localhost. 而这又只能从容器本身中获得。没有端口暴露会帮助你。您需要以允许外部访问的方式设置端口绑定。例如,通过容器的 IP 以允许暴露语句工作。

简而言之,EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0像这样添加环境变量

version: '3.7' # Specify docker-compose version
services:
   expo: # Name of the frontend service
      container_name: expo-prestadores
      build: ./ # Specify the directory of the Dockerfile
      ports:
         - 19000:19000 # Specify port-forwarding
         - 19001:19001
         - 19002:19002
      volumes: # Mount host path in the container
         - ./:/usr/src/app
         - /usr/src/app/node_modules
      environment:
         - EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0 

给你的docker-compose.yml,你应该没问题。

于 2020-01-08T06:53:17.960 回答
2

我可能有点太晚了,但我在这里想出了一个解决方法,一旦你实现了@ckaserer 给出的解决方案,你可以登录到http://0.0.0.0:19002并选择Tunnel而不是LANin如下图所示的连接部分并在 Expo Go App 上运行您的应用程序就可以了 在此处输入图像描述

于 2021-05-01T11:24:12.740 回答
1

要修复前面回复中提到的浏览器中的黑色背景屏幕,您必须添加 REACT_NATIVE_PACKAGER_HOSTNAME 环境变量并将其设置为您计算机的本地 IP 地址。然后,不要导航到localhost:19002Expo 0.0.0.0:19002Developer Tools,而是导航到<<HOST LOCAL IP>>:19002(当然,替换为您各自的 IP),您应该会看到 DevTools 正在工作。此页面上的 QR 码应在 ExpoGo 上的地址加载您的应用程序<<HOST LOCAL IP>>:19000

您的 docker-compose.yml 现在应该如下所示:

version: '3.7' # Specify docker-compose version
services:
   expo: # Name of the frontend service
      container_name: expo-prestadores
      build: ./ # Specify the directory of the Dockerfile
      ports:
         - 19000:19000 # Specify port-forwarding
         - 19001:19001
         - 19002:19002
      volumes: # Mount host path in the container
         - ./:/usr/src/app
         - /usr/src/app/node_modules
      environment:
         - EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0 
         - REACT_NATIVE_PACKAGER_HOSTNAME=<<HOST LOCAL IP>>>

于 2021-09-20T15:07:37.310 回答