命名的docker volume未使用docker-compose

时间:2017-06-21 13:49:39

标签: docker docker-compose

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

搬运工-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

客户端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"]

2 个答案:

答案 0 :(得分:2)

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

话虽如此,你可以:

  1. 使用docker-compose down -v删除之间的广告系列,并在下一个docker-compose up -d重新创建并初始化。

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

  3. 摆脱音量并将代码直接包含在图像中。

  4. 我推荐后者。

答案 1 :(得分:0)

假设您像这样共享src文件夹:

...
volumes:
      - ./my_src:/path/to/docker/src
...

对我有用的是整理my_src文件夹:

chown $USER:$USER -R my_src

事实证明,某些文件是由root创建的,而docker无法对其进行修改。

希望有帮助!