![](/img/trans.png)
[英]How to mount Docker directory into host directory with docker-compose
[英]docker unable to mount host directory to docker container with docker-compose
我無法將主機目錄(在 rasberry pi 上)掛載到 docker 容器api_service
。 即使使用主機chmod -R 777
。
我能夠從命令行docker start --mount type=bind,src=/data/yarmp-data,target=/data/yarmp-data docker_api_service_1
和docker inspect containerId
掛載它運行api_service
我已經完成了安裝,並且在容器內就是這種情況。 但我想用docker-compose
來實現。
我在docker-compose.yaml
文件中嘗試了不同的語法,但從未實現。 每次刪除所有容器、圖像,然后docker-compose build
和docker-compose up
。
我錯過了什么? 有沒有辦法在容器啟動時跟蹤掛載選項? 在將目標映像掛載到docker-compose.yaml
之前,是否應該在目標映像中創建目標目錄?
#Doc: https://github.com/compose-spec/compose-spec/blob/master/spec.md
version: '3.2'
services:
api_service:
build: ./api_service
restart: always
ports:
- target: 8080
published: 8080
depends_on:
- postgres_db
links:
- postgres_db:yarmp-db-host # database is postgres_db hostname into this api_service
volumes:
- type: bind
source: $HOST/data/yarmp-data #Host with this version not working
source: /data/yarmp-data #Host absolute path not working
#source: ./mount-test #not working either
target: /data/yarmp-data
#- /data/yarmp-data:/data/yarmp-data # not working either
postgres_db:
build: ./postgres_db
restart: always
ports:
- target: 5432
published: 5432
env_file:
- postgres_db/pg-db-database.env # configure postgres
volumes:
- database-data:/var/lib/postgresql/data/
FROM postgres:latest
LABEL maintainer="me@mail.com"
RUN mkdir -p /docker-entrypoint-initdb.d
COPY yarmp-dump.sql /docker-entrypoint-initdb.d/
FROM arm32v7/adoptopenjdk
LABEL maintainer="me@mail.com"
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
#csv files data
RUN mkdir -p /data/yarmp-data #Should I create it or not??
RUN mkdir -p /main-app
WORKDIR /main-app
# JAVA APP DATA
ADD my-api-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar","/main-app/app.jar"]
似乎我的整個docker-compose.yaml
文件不正確。
正如@xdhmoore 所指出的,存在縮進問題等。
我想通了:
docker-compose config
驗證docker-compose.yaml/usr/share/vim/vim81/ftplugin/yaml.vim
用空格替換制表符是正確的...version: '3.2'
services:
api_service:
build: ./api_service
restart: always
ports:
- target: 8080
published: 8080 #2 spaces before published
depends_on:
- postgres_db
links:
- postgres_db:yarmp-db-host
volumes:
- type: bind
source: /data/yarmp-data #2 spaces before source, meaning same level as previous '- types:...' and add 2 spaces more
target: /data/yarmp-data #2 spaces before target
postgres_db:
build: ./postgres_db
restart: always
ports:
- target: 5432
published: 5432 #2 spaces before published
env_file:
- postgres_db/pg-db-database.env # configure postgres
volumes:
- database-data:/var/lib/postgresql/data/
volumes:
database-data:
這是基於您的答案中的 YAML 。 當我將它插入這個 yaml 到 json 轉換器時,我得到:
{
"version": "3.2",
"services": null,
"api_service": {
"build": "./api_service",
"restart": "always",
"ports": [
{
"target": "8080\npublished: 8080"
}
],
"depends_on": [
"postgres_db"
],
"links": [
"postgres_db:yarmp-db-host"
],
"volumes": [
{
"type": "bind\nsource: /data/yarmp-data"
}
]
},
"postgres_db": {
"build": "./postgres_db",
"restart": "always",
"ports": [
{
"target": "5432\npublished: 5432"
}
],
"env_file": [
"postgres_db/pg-db-database.env"
],
"volumes": [
"database-data:/var/lib/postgresql/data/"
]
},
"volumes": {
"database-data": null
}
}
您可以看到幾個地方的結果類似於"type": "bind\nsource: /data/yarmp-data"
。 YAML 似乎將此處的source
行解釋為多行字符串的第二行。 但是,如果您調整縮進以與t
in - type
對齊,您最終會得到:
...
"volumes": [
{
"type": "bind",
"source": "/data/yarmp-data",
"target": "/data/yarmp-data"
}
]
...
YAML 中的縮進很棘手(這很重要),所以我發現上述工具和類似工具有助於獲得我想要的東西。 它還幫助我從列表、對象和字符串的角度考慮 YAML。 這里-
在列表中創建一個新項目,然后type: bind
是該項目中的鍵值(不在列表中)。 那么source: blarg
也是同一個 item 中的 key-value,所以它應該與type
中的t
對齊是有道理的。 縮進更多表示您正在繼續一個多行字符串,我認為如果您縮進更少(例如與-
對齊),您會收到錯誤或最終將鍵值對添加到層次結構更高的對象之一。
無論如何,這肯定令人困惑。 我發現這樣的在線工具很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.