Docker-compose卷不会复制任何文件

时间:2016-06-21 19:26:31

标签: docker docker-compose dockerfile docker-volume

我在Fedora 23中,我正在使用docker-compose构建两个容器:app和db。 我想使用该docker作为我的开发环境,但每次我更改代码时都必须执行docker-compose build和up。所以我正在搜索并尝试“卷”选项,但我的代码不会被复制到docker。

当我运行docker-build时,“RUN ls”命令不会列出“app”文件夹或其中的任何文件。

Obs :在我拥有的根文件夹中:docker-compose.yml,.gitignore,app(文件夹),db(文件夹)

Obs¹:如果我删除了卷和working_dir选项,而是在app / Dockerfile中使用“COPY。/ app”命令,它可以工作,我的应用程序正在运行,但我想要它同步我的代码。

任何人都知道如何让它发挥作用?

我的docker-compose文件是:

version: '2'  
services:  
  app:
    build: ./app
    ports:
     - "3000:3000"
    depends_on:
     - db
    environment:
     - DATABASE_HOST=db
     - DATABASE_USER=myuser
     - DATABASE_PASSWORD=mypass
     - DATABASE_NAME=dbusuarios
     - PORT=3000
    volumes:
     - ./app:/app
    working_dir: /app
  db:
    build: ./db
    environment:
     - MYSQL_ROOT_PASSWORD=123
     - MYSQL_DATABASE=dbusuarios
     - MYSQL_USER=myuser
     - MYSQL_PASSWORD=mypass

在这里你可以看到我的app容器Dockerfile: https://gist.github.com/jradesenv/d3b5c09f2fcf3a41f392d665e4ca0fb9

下面是Dockerfile中RUN ls命令的输出:

仓 靴 开发 等等 家 LIB lib64的 媒体 MNT 选择 PROC 根 跑 sbin目录 SRV SYS TMP USR VAR

4 个答案:

答案 0 :(得分:1)

卷安装在容器中。 Dockerfile用于创建图像,该图像用于制作容器。这意味着Dockerfile中的RUN ls将在安装卷之前显示文件系统。如果您需要将这些文件作为构建图像的一部分来完成,则它们不应该在卷中,并且您需要使用COPY命令将它们复制为“#{1}}命令。我描述过。如果您只是想要证明这些文件已安装在正在运行的容器中,请运行

docker exec $container_name ls -l /

其中$container_name类似于${folder_name}_app_1,您将在docker ps中看到。

答案 1 :(得分:0)

两件事,您尝试过version: '3'第二版似乎已经过时了。另外,尝试将working_dir放入Dockerfile而不是docker-compose。也许版本2不支持它?

这是我最近在各个Dockerfile中使用卷和工作目录的docker-compose:

version: '3'
services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    ports:
      - 3001:3001
    volumes:
      - ./frontend:/app
    networks:
      - frontend
  backend:
    build: .
    ports:
      - 3000:3000
    volumes:
      - .:/app
    networks:
      - frontend
      - backend
    depends_on:
      - "mongo"
  mongo:
    image: mongo
    volumes:
      - ./data/db:/data/db
    ports:
      - 27017:27017
    networks:
      - backend
networks:
  frontend:
  backend:

答案 2 :(得分:0)

您可以扩展或覆盖docker compose配置。请关注以获取更多信息:https://docs.docker.com/compose/extends/

答案 3 :(得分:0)

我在Windows中也遇到了同样的问题!

volumes:
      - ./src/:/var/www/html

在Windows ./src/中,此语法可能无法在常规command prompt中使用,请改用powershell ,然后运行docker-compose up -d

如果遇到了越来越多的问题,它应该可以工作。