如何配置docker-compose.yaml实现直接通过IP访问ShinyApp
解决方案:配置Docker Compose实现IP直接访问ShinyApp
要实现输入主机IP即可直接访问ShinyApp(无需手动添加端口),只需将ShinyApp容器的80端口映射到主机的80端口——HTTP协议默认使用80端口,浏览器访问时会自动选用该端口,无需手动指定。
修改后的docker-compose.yaml
version: "3" services: db: image: kartoza/postgis:14-3.2 volumes: - ./mypostgres-dump/dumpfile.sql:/docker-entrypoint-initdb.d/create_tables.sql environment: - POSTGRES_DB=XXX - POSTGRES_USER=XXXX - POSTGRES_PASSWORD=XXXX - POSTGRES_MULTIPLE_EXTENSIONS=postgis, postgis_raster ports: - "5432:5432" restart: always networks: - skynet shiny: build: ./webapp restart: always container_name: shiny depends_on: - "db" ports: - "80:80" # 映射主机80端口到容器内的ShinyApp端口 networks: - skynet networks: skynet:
关键修改说明
- 替换原
shiny服务中的expose: - "80"为ports: - "80:80":expose仅用于容器内部网络的端口暴露,不会将端口映射到主机;而ports会建立主机端口与容器端口的转发关系,让外部可以通过主机IP访问容器服务。 - 你的Dockerfile已经正确配置ShinyApp监听容器内的80端口(
options('shiny.port'=80,shiny.host='0.0.0.0')),无需额外调整镜像配置。 - 注意:如果主机的80端口已被其他服务占用,需要先停止占用该端口的服务,否则端口映射会失败。
内容的提问来源于stack exchange,提问作者Marco Fiorentini
相关产品推荐
相关产品推荐

