首页 文章

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

提问于
浏览
3

我在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命令的输出:

bin boot dev etc home lib libst media mnt opt proc root run sbin srv sys tmp usr var

2 回答

  • 1

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

    docker exec $container_name ls -l /
    

    哪里 $container_name 会像 ${folder_name}_app_1 ,你会在 docker ps 中看到 .

  • 0

    两件事,你试过 version: '3' 版本二似乎已经过时了 . 还可以尝试将working_dir放入 Dockerfile 而不是docker-compose . 也许它在版本2中不受支持?

    这是一个最近的docker-compose,我在各自的Dockerfiles中使用了卷和工作:

    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:

相关问题