在Docker中运行的Jenkins将 Angular应用部署到Nginx

前端开发 2026-07-12

我有一个包含若干服务的Docker Compose文件。
其中有两个服务是Jenkins服务器,另一个是Nginx服务器。所有服务包括这两个在内都运行在同一个Docker网络中,但位于不同的容器里。

我正在使用Jenkins构建并将一个Angular应用部署到Nginx容器。
我卡在如何把静态的Angular文件复制到Nginx容器里。任何建议都不胜感激。

下面是我的Docker Compose文件:

services:
  jenkins:
    build:
        dockerfile: Dockerfile.jenkins
    container_name: jenkins-server
    ports:
      - "9001:8080"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock # To build images within container
    networks:
      - devops-net

  tomcat:
    build:
        dockerfile: Dockerfile.tomcat
    container_name: tomcat-server
    ports:
      - "9000:8080"
    networks:
      - devops-net
    depends_on:
      - jenkins
    volumes:
       - tomcat_webapps:/usr/local/tomcat/webapps

  mysql:
    image: mysql:latest
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: occassionsdb
    ports:
      - "3306:3306"
    networks:
        - devops-net
    volumes:
      - mysql-data:/var/lib/mysql

  keycloak:
    image: quay.io/keycloak/keycloak:26.0.2
    extra_hosts:
      - "keycloak:127.0.0.1"
      - "nobara-pc:host-gateway"
    container_name: keycloak-container
    command: start-dev # Use 'start' for production with proper TLS
    environment:
      #KC_HOSTNAME: http://keycloak:8080
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://db:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: password
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    networks:
        - devops-net
    ports:
      - "8082:8080"
    depends_on:
      - db
  db:
    image: postgres:15
    container_name: postgres-container
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: password
    networks:
        - devops-net
    volumes:
      - pgdata:/var/lib/postgresql/data

  nginx:
   #build:
   #dockerfile: Dockerfile.nginx
    container_name: nginx-server
    image: nginx:latest
    networks:
    - devops-net
    ports:
    - "4200:80" # Maps port 4200 on the host to port 80 in the container
    volumes:
     - nginx_html:/usr/share/nginx/html
      # Mounts a custom nginx.conf file to the container's main config file
     - nginx_conf:/home/nginx_conf/nginx.conf:/etc/nginx/nginx.conf
    restart: unless-stopped # Automatically restart the container unless manually stopped

volumes:
  pgdata:
  jenkins_home:
  mysql-data:
  tomcat_webapps:
  nginx_html:
  nginx_conf:

networks:
  devops-net:

解决方案

The solution was a bind mount shared folder on the local host upon which the docker containers are running. See amended docker compose file below

请看下方修改后的Docker Compose文件:

services:
  jenkins:
    build:
        dockerfile: Dockerfile.jenkins
    container_name: jenkins-server
    ports:
      - "9001:8080"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock # To build images within container
      - ./shared_data:/shared_data
    networks:
      - devops-net
  nginx:
   #build:
   #dockerfile: Dockerfile.nginx
    container_name: nginx-server
    image: nginx:latest
    networks:
    - devops-net
    ports:
    - "4200:80" # Maps port 4200 on the host to port 80 in the container
    volumes:
     - nginx_conf:/home/DockerDeploy_OccassionsREST/nginx_conf/nginx.conf:/etc/nginx/nginx.conf
     - ./shared_data/ocassion-reminder-app/browser:/usr/share/nginx/html
    restart: unless-stopped # Automatically restart the container unless manually stopped
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章