docker正在运行但无法在服务器上访问

时间:2019-08-28 01:30:11

标签: node.js docker jenkins docker-compose

我有Jenkins作业的阶段,可以通过docker测试和部署我的nodejs,我在端口3000上运行docker,但是当我尝试浏览我的ip-server:3000时,它不起作用并且什么也没有 我的码头工人正在运行

这是我的Jenkinsfile

node {
  try {
    stage('Checkout') {
      checkout scm
    }
    stage('Environment') {
      sh 'git --version'
      echo "Branch: ${env.BRANCH_NAME}"
      sh 'docker -v'
      sh 'printenv'
    }
    stage('Build Docker test'){
     sh 'docker build -t crud-test -f Dockerfile.test --no-cache .'
    }
    stage('Docker test'){
      sh 'docker run --rm crud-test'
    }
    stage('Clean Docker test'){
      sh 'docker rmi crud-test'
    }
    stage('Deploy'){
      if(env.BRANCH_NAME == 'master'){
        sh 'docker build -t crud --no-cache .'
        sh 'docker run -d -p 3000:3000 -e DB_USERNAME=myusername -e DB_PASSWORD=12345678 -e DB_NAME=employee crud'
      }
    }
  }
  catch (err) {
    throw err
  }
}

Dockerfile:

# Extending image
FROM node:carbon

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install autoconf automake libtool nasm make pkg-config git apt-utils

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Versions
RUN npm -v
RUN node -v

COPY ./server/ /usr/src/app

RUN npm install

# Port to listener
EXPOSE 3000

# Environment variables
ENV PORT 4000
ENV DB_USERNAME myusername
ENV DB_PASSWORD 12345678
ENV DB_NAME employee

# Main command
CMD [ "npm", "run", "dev" ]

我在ubuntu服务器上通过docker-compose运行Jenkins, 是我缺少或错了吗? 因为我的目标是使用Jenkins来测试我的服务器,并且在测试成功之后,它将把我的Nodejs部署在我的ubuntu服务器上 因此,在Jenkins上构建完成后,我可以在浏览器上浏览服务器API,以确保它可以在ip-sever:3000上运行

但是在上面的管道中,是否每次我按下主键即可完成该工作,是否无需在Jenkins上单击build now即可更新服务器API?如果没有,该如何配置?

我也不知道如何隐藏我的ENV,所以我出现在舞台Jenkinsfile上,因为在多分支管道上,env参数没有任何选择

2 个答案:

答案 0 :(得分:0)

问题是,詹金斯很可能正在生成一个容器来运行您的构建。

如果用于构建的容器未使用主机上的docker引擎,而是使用“ docker-in-docker”,则您的docker run命令会在主机上运行端口3000,而不是在主机上公开端口3000。

>

尝试运行docker ps,并查看主机上正在运行哪些容器,并查看是否有经过测试的容器。如果存在,请通过docker inspect检查它的工作范围,暴露的端口等。

您还可以检查docker'nat'网络,以查看端口3000是否确实转发到了主机。

答案 1 :(得分:0)

我可以看到您的环境变量端口4000是您的服务器端口吗?如果是这样,则必须更改docker run命令以将端口4000映射为可在主机中的端口3000上使用,或者可以将环境变量Port更改为3000