在Docker中运行的Jenkins将 Angular应用部署到Nginx
我有一个包含若干服务的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。