Ich spiele mit Docker Compose und Volumes
version: '2'
services:
php-Apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes_from:
- volumes_source
volumes_source:
image: tianon/true
volumes:
- ../:/var/www
volumes_data:
image: tianon/true
volumes:
- ./data/sessions:/sessions
Nehmen wir die folgenden Fakten:
~/var/www
/var/www
Schreiben.Ich habe docs hier gelesen, aber mir ist nicht klar, wie ich mit Datenmengen und Hostdaten umgehen soll.
Ich möchte die Daten auf dem Host mit dem Container teilen, weiß aber nicht einmal, ob die obige docker-compose.yml
- Datei richtig ist oder was geändert werden muss, um das zu erreichen, was ich brauche. Ich weiß, wie man es allein mit docker run
Macht, habe aber keine Ahnung, wie Docker Compose funktioniert?
Kann mir jemand helfen, das zum Laufen zu bringen?
Update: damit spielen
Ich habe der Datei docker-compose.yml
Folgende Zeilen hinzugefügt:
volumes_from:
- volumes_source
Und ich führe den docker-compose up
Noch einmal aus, aber das ist das Ergebnis:
php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0
Ich bin nicht sicher, was passiert oder warum ich den Fehler erhalte.
Sie versuchen anscheinend, einen "Datencontainer" zu definieren. Dieses Muster war früher üblich, aber dies ist nicht erforderlich, nachdem das System docker volume
In Docker 1.9 ( https://github.com/docker/docker/blob/master/CHANGELOG) hinzugefügt wurde. md # 190-2015-11- )
Dieses von Ihnen verwendete Image, tianon/true
, Führt den Befehl "true" aus, der nichts anderes ausführt als den Exit-Code 0 zurückzugeben und dann zu beenden. Aus diesem Grund wird der Container als beendet angezeigt.
Verwenden Sie anstelle von Datencontainern ein benanntes Volume. Beispiel: Der folgende Ansatz unter Verwendung eines Datencontainers:
docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp
wird dies:
docker volume create --name sessions
docker run -v sessions:/sessions -d myapp
Da Sie Compose verwenden, können Sie Datenträger mit dem Datenträgerschlüssel definieren.
version: '2'
services:
php-Apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes:
- sessions:/sessions
- docroot:/var/www
volumes:
sessions:
driver: local
docroot:
driver: local
Alle Details und ein Beispiel finden Sie hier: https://docs.docker.com/compose/compose-file/compose-file-v2/
Sie haben jedoch auch erwähnt, dass Sie diese Volumendaten zwischen dem Container und Ihrem Host freigeben möchten. In diesem Fall ist weder ein Datencontainer noch ein benanntes Volume erforderlich. Sie können ein Host-Volume einfach direkt angeben:
version: '2'
services:
php-Apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes:
- ./data/sessions:/sessions
- ../:/var/www