【发布时间】:2016-03-26 14:31:17
【问题描述】:
我已经克隆了一个使用 docker-compose 的 docker 设置。一位远程开发人员确认它可以工作,所以我的问题似乎与我的设置有关。
我跑了docker-compose up,但目前这给了我这个:
$ docker-compose up
Creating volume "mycompanydocker_mysql-data" with local driver
Creating volume "mycompanydocker_redis-data" with local driver
Creating volume "mycompanydocker_app-data" with local driver
Creating volume "mycompanydocker_mongo-data" with local driver
mycompanydocker_redis_1 is up-to-date
mycompanydocker_mongo_1 is up-to-date
mycompanydocker_mysql_1 is up-to-date
Building app
ERROR: Cannot locate specified Dockerfile: Dockerfile
我的docker-compose.yml 看起来像这样:
version: '2'
services:
mysql:
build: mysql/.
env_file: env
expose:
- 3306
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
mongo:
build: mongo/.
env_file: env
expose:
- 27017
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
redis:
build: redis/.
env_file: env
expose:
- 6379
ports:
- "6379:6379"
volumes:
- redis-data:/data
app:
build: app/.
env_file: env
expose:
- 80
ports:
- "80:80"
volumes:
# To mount a local directory, change this
# To use a docker volume
- app-data:/app
# local app
# - ./mycompany:/app
depends_on:
- mysql
- mongo
- redis
volumes:
app-data:
driver: local
mysql-data:
driver: local
redis-data:
driver: local
mongo-data:
driver: local
树看起来像这样:
$ tree
.
├── README.rst
├── app
│ ├── Dockerfile
│ ├── bin
│ │ ├── setup.sh
│ │ ├── start-nginx.sh
│ │ ├── start-rqworker.sh
│ │ ├── start.sh
│ │ └── update.sh
│ ├── etc
│ │ ├── nginx
│ │ │ └── sites-available
│ │ │ └── app
│ │ ├── supervisor
│ │ │ └── conf.d
│ │ │ └── supervisord.conf
│ │ └── supervisord.conf
│ └── ssh
│ └── id_rsa
├── docker-compose.yml
├── env
├── mongo
│ └── Dockerfile
├── mysql
│ └── Dockerfile
└── redis
└── Dockerfile
我不明白的是docker-compose 似乎找到了所有Dockerfiles,除了app 文件夹中的那个。我在 OSX 10.11.2 上安装了以下内容:
Docker version 1.10.3, build 20f81dddocker-compose version 1.6.2, build 4d72027
我刚开始使用 Docker,我有点卡在这里。有谁知道可能出了什么问题或我如何调试它?欢迎所有提示!
[编辑]
我忘了说没有隐藏的.dockerignore文件:
$ ls -la
total 56
drwx------@ 11 kramer staff 374 25 mrt 14:13 .
drwx------+ 1134 kramer staff 38556 26 mrt 17:27 ..
-rw-r--r--@ 1 kramer staff 8196 26 mrt 08:14 .DS_Store
-rw-r--r--@ 1 kramer staff 23 24 mrt 15:29 .gitignore
-rw-r--r--@ 1 kramer staff 3879 24 mrt 15:29 README.rst
drwxr-xr-x@ 7 kramer staff 238 25 mrt 14:26 app
-rw-r--r--@ 1 kramer staff 868 25 mrt 17:50 docker-compose.yml
-rw-r--r--@ 1 kramer staff 219 24 mrt 15:29 env
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mongo
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 mysql
drwxr-xr-x@ 3 kramer staff 102 24 mrt 15:29 redis
并且.gitignore 文件也没有包含任何特殊内容(不知道是否重要):
$ cat .gitignore
.project
.pydevproject
【问题讨论】:
-
检查您是否有隐藏的
.dockerignore文件,其内容中可能包含Dockerfile。另一个可能的原因是您的文件夹结构中有符号链接。 -
@warmoverflow - 我忘了提到没有
.dockerignore。我搜索了整个文件系统 (sudo find / -name .dockerignore) 并确实找到了一个.dockerignore文件,但那是在一些完全不相关的 repo 中。此外,项目中没有符号链接。 -
能否明确指定 Dockerfile 名称,看看是否有效。见docs.docker.com/compose/compose-file/#context。
build: context: . dockerfile: Dockerfile-alternate -
@warmoverflow - 我尝试明确指定 docker 文件,但我得到了
Unsupported config option for services.app: 'dockerfile'。根据this issue,不支持指定 dockerfile。还有其他想法吗? -
对我来说,问题是我的 Dockerfile 是在一个目录中指定的。
dockerfile与为构建提供的context相关。
标签: docker docker-compose