2017-06-21 54 views
1

我想有一个服务来构建我的客户端,然后使用命名卷将其共享到服务器。每次我做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"] 
+0

可能的重复:https://stackoverflow.com/questions/44251094/i-want-to-share-code-content-across-several-containers-using-docker-compose-volu/44265470(抱歉第二次前关闭) – BMitch

回答

0

根据定义,体积是泊坞窗不会接触其它持久目录比当它们执行初始创建空。如果这是你的代码,它可能不应该是一个音量。

虽这么说,你可以:

  1. 删除运行之间的体积docker-compose down -v,它将被重新初始化并在下次docker-compose up -d

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

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

我推荐后者。

+0

感谢您的回复。我将如何去实施#3?将代码直接包含在图像中意味着什么? – Ero

+0

对于#3,您从docker-compose.yml中删除卷线,并将“COPY”行保留在Dockerfile中。 – BMitch

+0

如果我这样做,我的服务器项目将如何使用客户端文件?它们位于何处? – Ero