命名的 docker 卷未使用 docker-compose 更新

Ero*_*Ero 7 docker docker-compose

我正在尝试使用一项服务来构建我的客户端,然后使用命名卷将其共享到服务器。每次我做一个docker-compose up --build我希望客户端构建和更新命名的 volume clientapp:。我怎么做?

docker-compose.yml

version: '2' 

volumes:
  clientapp:

services:
  database:
    image: mongo:3.4
    volumes:
      - /data/db
      - /var/lib/mongodb
      - /var/log/mongodb

  client:
    build: ./client
    volumes:
      - clientapp:/usr/src/app/client

  server:
    build: ./server
    ports:
      - "3000:3000"
    environment:
      - DB_1_PORT_27017_TCP_ADDR=database
    volumes:
      - clientapp:/usr/src/app/client
    depends_on:
      - client
      - database
Run Code Online (Sandbox Code Playgroud)

客户端 Dockerfile

FROM node:6

ENV NPM_CONFIG_LOGLEVEL warn

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

COPY package.json /usr/src/app

RUN npm install

COPY . /usr/src/app

# builds my application into /client
CMD ["npm", "build"]
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 8

根据定义,卷是 docker 不会触及的持久目录,除了在它们为空时执行初始创建之外。如果这是您的代码,它可能不应该是一个卷。

话虽如此,您可以:

  1. 删除运行之间的卷docker-compose down -v,它将在下一次重新创建和初始化docker-compose up -d

  2. 更改容器启动脚本以在启动时将文件从映像中的某个其他目录复制到卷位置。

  3. 去掉音量,直接在图片中包含代码。

我推荐后者。