首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用web应用程序访问承载在另一个容器中的docker容器中的nodejs

使用web应用程序访问承载在另一个容器中的docker容器中的nodejs
EN

Stack Overflow用户
提问于 2021-02-12 10:33:32
回答 1查看 425关注 0票数 0

我有三个集装箱在运行:

  1. nodejs
  2. tomcat
  3. mysql

tomcat容器能够连接到mysql。节点能够连接到mysql。

然而,当tomcat容器试图连接到http请求上的节点时,使用node-container-id:3004/3333作为hostname:portnode-container-internal-ip:3004/3333作为hostip:port,,它总是提供404错误。

我的码头-Compose.yml如下:

代码语言:javascript
复制
version: '2.1'

services:

  openmrs-referenceapplication-mysql:
    restart: "always"
    image: mysql:5.7
    ports:
      - 3333:3306
    command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci"
    environment:
      MYSQL_DATABASE: ${MYSQL_DB:-openmrs}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root-pass}
      MYSQL_USER: ${MYSQL_USER:-openmrs_user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-my-pass}
    healthcheck:
      test: "exit 0"
    volumes:
      - openmrs-referenceapplication-mysql-data:/var/lib/mysql

  openmrs-referenceapplication-node:
    restart: "always"
    image: node:12.20.1
    depends_on :
      - openmrs-referenceapplication-mysql
    expose:
      - "3004"
    ports:
      - "3009:3004"
    links:
      - openmrs-referenceapplication-mysql
      - openmrs-referenceapplication
    environment:
      DB_DATABASE: ${MYSQL_DB:-my-db}
      DB_HOST: openmrs-referenceapplication-mysql
      DB_USERNAME: ${MYSQL_USER:-root}
      DB_PASSWORD: ${MYSQL_PASSWORD:-my-pass}
    volumes:
     - openmrs-referenceapplication-node-data:/home/azureuser/my-dir
     - ./Mydir:/Mydir
    command: node ./Mydir/bin/www


  openmrs-referenceapplication:
    restart: "always"
    image: openmrs/openmrs-reference-application-distro:2.8.0
    depends_on:
      - openmrs-referenceapplication-mysql
    ports:
      - "8001:8080"
    links:
      - openmrs-referenceapplication-mysql
    environment:
      DB_DATABASE: ${MYSQL_DB:-openmrs}
      DB_HOST: openmrs-referenceapplication-mysql
      DB_USERNAME: ${MYSQL_USER:-openmrs_user}
      DB_PASSWORD: ${MYSQL_PASSWORD:-my-pass}
      DB_CREATE_TABLES: 'true'
      DB_AUTO_UPDATE: 'true'
      MODULE_WEB_ADMIN: 'true'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/openmrs/"]
      timeout: 20s
    volumes:
      - openmrs-referenceapplication-data:/usr/local/tomcat/.OpenMRS/
      - /usr/local/tomcat/.OpenMRS/modules/ # do not store modules in data
      - /usr/local/tomcat/.OpenMRS/owa/ # do not store owa in data
      - ./webservices.rest-2.29.0.omod://usr/local/tomcat/.OpenMRS/modules/webservices.rest-2.29.0.omod
      - /var/lib/tomcat8/webapps/ROOT.war:/usr/local/tomcat/webapps/ROOT
     
volumes:
   openmrs-referenceapplication-mysql-data:
   openmrs-referenceapplication-data:
   openmrs-referenceapplication-node-data:

知道我错过了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-12 11:28:33

安永!

您的容器可以使用服务名称(只有此名称)到达。因此,如果您想从另一个节点容器到达节点容器,则必须输入以下入口:http://openmrs-referenceapplication-node/<sub_path>。要到达容器外的服务(在本地机器上),只需访问:localhost:3009 (在您的情况下)。

处理conectivity问题的最佳方法是进入容器并尝试对目标容器进行ping。此外,您应该使用最新版本的compose networks,而不是links

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66170217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档