【问题标题】:How to make a call to Rest-Endpoint which are deployed on Linux machine as a Docker Container如何调用作为 Docker 容器部署在 Linux 机器上的 Rest-Endpoint
【发布时间】:2017-05-02 14:42:51
【问题描述】:

如有重复请见谅: 我有一个 docker 容器,它是一个 Node.js 服务。我想从同一台 linux 机器测试该服务的端点。我正在使用curl 命令测试端点我得到curl: (56) Recv failure: Connection reset by peer

这是我的 Dockerfile

FROM ubuntu

ARG ENVIRONMENT
ARG PORT

RUN apt-get update -qq
RUN apt-get install -y build-essential nodejs npm nodejs-legacy vim

RUN mkdir /database_service
ADD . /database_service
WORKDIR /database_service

RUN npm install -g express
RUN npm install -g path
RUN npm cache clean


EXPOSE $PORT

ENTRYPOINT [ "node",  "server.js" ]
CMD [ $PORT, $ENVIRONMENT ]

这是我的配置文件:

module.exports = {
        database: {
            username: 'someusername',
            password: 'somepassword',
            host: '13.68.86.237',
            port: 27017,
            name: 'admin'   
        },
        "sandbox_config": {
            "commerce.api.endpoint":"sandbox_ep",
            "eurekaInstance":{
                    "instanceId":'10.71.9.40:database-service:'+process.env.PORT || 9200,
                    "hostName": 'database-service',
                    "app": 'database-service',
                    "ipAddr": '10.71.9.40',
                    "port": { '$': process.env.PORT || 9200, '@enabled': 'true' },
                    "securePort": { '$': 443, '@enabled': 'false' },
                    "dataCenterInfo": {
                        '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
                         "name": 'MyOwn'
                    },
                    "homePageUrl": 'http://database-service:'+process.env.PORT || 9200+'/',
                    "statusPageUrl": 'http://database-service:'+process.env.PORT || 9200+'/info',
                    "healthCheckUrl": 'http://database-service:'+process.env.PORT || 9200+'/health',
                    "vipAddress": 'database-service',
                    "secureVipAddress": 'database-service',
                    "isCoordinatingDiscoveryServer": 'false',
                    "leaseInfo": { 
                        "renewalIntervalInSecs": 60000,
                        "durationInSecs": 60000,
                    }
            },
            "eurekaConfig":{
                 "host":'eureka-server',
                 "port":8761,
                 "servicePath":'/eureka/apps/'
             }
        }

};

请建议此处是否缺少某些内容或命令错误。

Here is the Snap for error

【问题讨论】:

  • 我们需要查看您的网络服务器配置和 Dockerfile
  • @Rawkode :我编辑了我的问题。

标签: node.js linux curl docker nodes


【解决方案1】:

如果您运行docker image inspect image_tag,您会看到您认为在您的CMD 指令中插入的变量在容器运行时才会解析。

在您的 ARG 说明之后添加此内容

ENV PORT $PORT
ENV ENVIRONMENT $ENVIRONMENT

确保默认环境变量在运行时可用

【讨论】:

  • [ { "Id": "02d56107ceb0a229387178c422c3aa6369dd53ee2687c90610cda15f15286141", "Created": "2017-05-03T07:40:14.730079112Z", "Path": "node", "Args": [ "server.js", "/bin/sh", "-c", "[ $PORT, $ENVIRONMENT ]" ], 那些东西都准备好了
  • 是的,$PORT 在那里,而不是您构建的扩展值。所以你需要添加我建议的ENV 行,或者在你的docker run 命令中传递-e PORT=80
  • 这是docker ps02d56107ceb0 jcibts_swm_sb/database_service:v0.1 "node server.js /b..." About an hour ago Up About an hour 0.0.0.0:9003->9003/tcp database_service的结果
  • 我通过运行命令传递它。请查看我的问题所附的图片docker ps
  • docker run -p ${EXTERNAL_PORT_NUMBER}:${INTERNAL_PORT_NUMBER} --network "sandbox_cloud" --name ${SERVICE_NAME} -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION} 这是我在 shell 文件中编写的命令并通过传递参数调用 shell 文件
猜你喜欢
  • 2016-01-16
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2021-06-26
  • 1970-01-01
相关资源
最近更新 更多