gitlab和docker组成:安装目录是空容器内空的
我正在尝试将Gitlab与Docker-Compose一起使用,以将我的节点应用部署到数字海洋液滴中。问题在于,包含节点应用程序的源代码的容器内的已安装目录是空的。
dockerfile
FROM node:10.15.0
# Define working directory and copy source
WORKDIR /app
# copy everything
COPY . .
# npm install
RUN npm install
docker-compose.yml
version: '3'
services:
mongodb:
hostname: mongodb
image: 'mongo:3.4.1'
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
- MONGODB_USER="mongodbadmin"
- MONGODB_PASS="mongodbadmin&*&"
expose:
- "27017"
volumes:
- './data/mongo:/data/db'
command: mongod --smallfiles --logpath=/dev/null
restart: always
server:
build:
dockerfile: Dockerfile
context: .
working_dir: /app
volumes:
- './src:/app/src'
depends_on:
- mongodb
environment:
- NODE_ENV=dev
ports:
- 3000:3000
command: npm start
.gitlab-ci.yml
image: docker/compose:latest
stages:
- publish
- deploy
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
deploy:
stage: deploy
tags:
- deployment
script:
- apk update && apk add openssh-client
- eval $(ssh-agent -s)
- echo "$ID_RSA" | tr -d '\r' | ssh-add - > /dev/null
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" down --remove-orphans
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" build
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" up
only:
- main
I am trying to use GitLab with Docker-compose to deploy my node app to a Digital Ocean droplet. The problem is that the mounted directory inside the container, which contains the source code of the node application, is empty.
Dockerfile
FROM node:10.15.0
# Define working directory and copy source
WORKDIR /app
# copy everything
COPY . .
# npm install
RUN npm install
docker-compose.yml
version: '3'
services:
mongodb:
hostname: mongodb
image: 'mongo:3.4.1'
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
- MONGODB_USER="mongodbadmin"
- MONGODB_PASS="mongodbadmin&*&"
expose:
- "27017"
volumes:
- './data/mongo:/data/db'
command: mongod --smallfiles --logpath=/dev/null
restart: always
server:
build:
dockerfile: Dockerfile
context: .
working_dir: /app
volumes:
- './src:/app/src'
depends_on:
- mongodb
environment:
- NODE_ENV=dev
ports:
- 3000:3000
command: npm start
.gitlab-ci.yml
image: docker/compose:latest
stages:
- publish
- deploy
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
deploy:
stage: deploy
tags:
- deployment
script:
- apk update && apk add openssh-client
- eval $(ssh-agent -s)
- echo "$ID_RSA" | tr -d '\r' | ssh-add - > /dev/null
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" down --remove-orphans
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" build
- docker-compose -H "ssh://$SERVER_USER@$SERVER_IP" up
only:
- main
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我通过删除卷来解决问题。那是因为Dockerfile本身复制了源代码,并且不需要卷。我只需要在开发环境中的卷,以便在进行代码更改时进行容器进行更新:)
我将创建单独的docker-compose.yml文件:一个用于开发,另一个用于生产环境。
I solved the issue by removing the volume. That is because the dockerfile itself copies the source code and there is no need for the volume. I only needed the volume in my development environment so that the container gets updated while I make code changes :)
I will create separate docker-compose.yml files: one for development and another for the production environment.