4

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

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

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

Obs¹ .: 如果我删除 volumes 和 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

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

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

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

4

4 回答 4

3

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

docker exec $container_name ls -l /

哪里$container_name会有类似的东西${folder_name}_app_1,你会在docker ps.

于 2016-06-23T19:33:54.543 回答
1

两件事,你有没有试过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:
于 2018-10-17T14:08:36.633 回答
0

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

于 2019-04-12T15:20:04.653 回答
0

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

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

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

如果这是一个安装问题,它应该可以工作。

于 2019-12-26T12:47:44.087 回答