Ich habe ein Docker-Setup geklont, das Docker-Compose verwendet. Ein Remote-Entwickler bestätigt, dass es funktioniert. Mein Problem scheint also bei meinem Setup zu liegen.
Ich lief docker-compose up
, aber das gibt mir momentan folgendes:
$ 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
Mein docker-compose.yml
sieht so aus:
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
und der Baum sieht so aus:
$ 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
Was ich nicht verstehe ist, dass docker-compose
alle Dockerfile
s zu finden scheint, mit Ausnahme derjenigen im app
-Ordner. Ich habe unter OSX 10.11.2 Folgendes installiert:
Docker version 1.10.3, build 20f81dd
docker-compose version 1.6.2, build 4d72027
Ich fange gerade mit Docker an und bin irgendwie hier festgefahren. Weiß jemand, was möglicherweise falsch ist oder wie ich das debuggen kann? Alle Tipps sind willkommen!
[EDIT] Ich habe vergessen zu erwähnen, dass es keine versteckte .dockerignore-Datei gibt:
$ ls -la
total 56
[email protected] 11 kramer staff 374 25 mrt 14:13 .
drwx------+ 1134 kramer staff 38556 26 mrt 17:27 ..
[email protected] 1 kramer staff 8196 26 mrt 08:14 .DS_Store
[email protected] 1 kramer staff 23 24 mrt 15:29 .gitignore
[email protected] 1 kramer staff 3879 24 mrt 15:29 README.rst
[email protected] 7 kramer staff 238 25 mrt 14:26 app
[email protected] 1 kramer staff 868 25 mrt 17:50 docker-compose.yml
[email protected] 1 kramer staff 219 24 mrt 15:29 env
[email protected] 3 kramer staff 102 24 mrt 15:29 mongo
[email protected] 3 kramer staff 102 24 mrt 15:29 mysql
[email protected] 3 kramer staff 102 24 mrt 15:29 redis
und die .gitignore-Datei enthält auch nichts Besonderes (weiß nicht, ob es wichtig ist):
$ cat .gitignore
.project
.pydevproject
So legen Sie die Docker-Datei fest. Leider kann ich das nicht in Kommentaren machen, da die Formatierung dort nicht unterstützt wird.
https://docs.docker.com/compose/compose-file/#context
app:
build:
context: app
dockerfile: Dockerfile
Ich hatte dieses Problem unter Windows mit einem docker-compose.yml
, der von einer Visual Studio-Vorlage erstellt wurde. Die Vorlage wurde erstellt als:
build:
context: .
dockerfile: <ProjectFolder>\Dockerfile
Und ich bekam Fehler: Cannot locate specified Dockerfile: <ProjectFolder>\Dockerfile
. Ich änderte den \
in /
und es begann für mich zu arbeiten (d. H. <ProjectFolder>/Dockerfile
). Vielleicht hilft das, wenn jemand diesen Fehler unter Windows hat.
In der Datei docker-compose.yml, um die Änderung vorzunehmen, um die Docker-Datei zu treffen:
app:
build: ./app
Ist path
dort, wo Sie die Dockerfile erwarten? Sie können das Flag --verbose
wie folgt überprüfen:
docker-compose --verbose up | grep compose.cli.verbose_proxy.proxy_callable | grep path
zum Beispiel:
compose.cli.verbose_proxy.proxy_callable: docker build <-
(pull=False, cache_from=None, stream=True, nocache=False, labels=None,
tag='your_app',
buildargs={'some_build': '1901', 'addr': '0.0.0.0', 'corsdomain': '*',
'rpcport': '8545'}, forcerm=False, rm=True,
path='/Users/jmunsch/Desktop/dev/your_app/app?', # in the verbose output
dockerfile='Dockerfile')
in Dockerfile definieren Sie die ARGS:
ARG some_flag=
ARG some_build=1900
ARG addr=0.0.0.0
ARG corsdomain="*"
ARG rpcport=8545
und in einer compose-Datei wie:
build:
context: ./your_app
dockerfile: Dockerfile
args:
some_flag: # --some_flag
some_build: 1901 # --some_build 1901
rpcaddr: 0.0.0.0 # --rpcaddr 0.0.0.0
rpcport: 8545 # --rpcport 8545
corsdomain: "*" # --corsdomain
In meinem Fall war es falsch am Zweig. Vergessen Sie nicht, einen bestimmten Zweig festzulegen, wenn Sie Ihr Image aus dem Remote-Kontext erstellen. Die URL für den Kontext sollte folgendermaßen aussehen:
services:
wss-home:
build:
context: "http://${LOGIN}:${PASSWD}@Host/path/to/repository.git#branch_name"
dockerfile: Dockerfile.prod
Sie müssen den Namen der Docker-Datei richtig angeben, wobei die Groß- und Kleinschreibung zu beachten ist. Ich hatte Großbuchstaben in DockerFile und kann sie daher nicht finden. Ich hoffe es hilft jemandem, der wie ich kämpft. Verwenden Sie lieber das dockerfile-Attribut beim Erstellen der Datei.
app:
build:
dockerfile: DockerFile