首页 > 解决方案 > docker 在容器上运行但不在服务器上运行

问题描述

我在 GitHub 上创建 Jenkinsfile、Dockerfile、Dockerfile.test 到 CI 和 CD 我的服务器 API,我在 Jenkins 上构建它并且构建成功,我的 docker 也在容器上运行,在 Jenkinsfile 阶段,我为测试和部署创建在服务器 API 上,并为容器使用 docker

我也在 docker 上运行 Jenkins,使用 docker-compose

这是我的 ubuntu 服务器上的 Dockerfile

FROM jenkins/jenkins:lts

USER root

这是我在 ubuntu 服务器上的 docker-compose

version: '3'

services:

  jenkins:
    build: .
    container_name: jenkins
    privileged: true
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker

  registry:
    image: registry
    container_name: registry
    restart: always
    ports:
      - 5000:5000

我在上面做了什么,我按照这个指令 然后我尝试 ro 运行它并在我的詹金斯服务器上登录,

我的詹金斯文件是这样的

  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 employee-test -f Dockerfile.test --no-cache .'
    }
    stage('Docker test'){
      sh 'docker run --rm employee-test'
    }
    stage('Clean Docker test'){
      sh 'docker rmi employee-test'
    }
    stage('Deploy'){
      if(env.BRANCH_NAME == 'master'){
        sh 'docker build -t employee --no-cache .'
        sh 'docker run -d -p 4000:4000 -e DB_USERNAME=admin -e DB_PASSWORD=adminxxx -e DB_NAME=employee employee'
      }
    }
  }
  catch (err) {
    throw err
  }
}

和我的 Dockerfile 用于这些工作

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

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN npm -v
RUN node -v

COPY ./server/ /usr/src/app

RUN npm install

EXPOSE 4000

ENV PORT 4000
ENV DB_USERNAME admin
ENV DB_PASSWORD adminxxx
ENV DB_NAME employee

CMD [ "npm", "run", "dev" ]

jenkins 作业成功构建它,在我的 Jenkins 的最后阶段,你可以看到我在我的 ubuntu 服务器上的 docker 容器上运行它,完成后,我尝试在邮递员上调用服务器 API http://ip-server:4000,但没有任何响应,我确实在我的ubuntu服务器上设置了防火墙tcp

我该如何解决这个问题?所以在詹金斯工作完成后,我想要什么我可以在我的邮递员上调用那个服务器 API 来测试它

标签: node.jsdockerubuntujenkinsdocker-compose

解决方案


配置看起来不错,所以似乎 docker compose 缓存了卷,所以请运行此命令来清理所有内容

 docker rm employee
 docker image rm employee
 docker-compose down -v 
 docker-compose up 

请确保詹金斯记录这个

'docker run -d -p 4000:4000 -e DB_USERNAME=admin -e DB_PASSWORD=adminxxx -e DB_NAME=employee employee'

推荐阅读