我在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
卷安装在容器中。 Dockerfile用于创建图像,该图像用于制作容器。这意味着Dockerfile中的RUN ls
将在安装卷之前显示文件系统。如果您需要将这些文件作为构建图像的一部分来完成,它们不应该在卷中,您需要使用COPY
命令复制它们,如您所述。如果您只是想要证明这些文件已安装在正在运行的容器中,请运行
docker exec $container_name ls -l /
$container_name
将会像${folder_name}_app_1
那样,你会在docker ps
中看到。
两件事,你试过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:
您可以扩展或覆盖docker compose配置。请关注更多信息:https://docs.docker.com/compose/extends/