[英]Can't mount volume in Docker Compose right
首先,我一步一步地完成了所有這些: https://docs.docker.com/language/golang/develop/完美運行。 然后我開始對我的 golang 項目進行同樣的嘗試。 它不僅需要卷中的 db,還需要 'assets' 和 'creds' 目錄,我能夠提供這些目錄與正常的 Dockerfile 和 'docker run' 命令中的 --mount 標志一起使用。 所以我的架構是:
docker container create --name temp -v roach:/data busybox \
docker cp assets/ temp:/data \
docker rm temp
docker run -it --rm \
--mount 'type=volume,src=roach,dst=/usr/data' \
--network mynet \
--name postgres-server \
-p 80:8080 \
-e PGUSER=totoro \
-e PGPASSWORD=myfriend \
-e PGHOST=db \
-e PGPORT=26257 \
-e PGDATABASE=mydb \
postgres-server
/usr/data/my_folders
順便說一句,這里是 Dockerfile:
# syntax=docker/dockerfile:1
FROM golang:1.18-buster AS build
WORKDIR /app
COPY go.mod .
RUN go mod download
COPY . .
RUN go mod tidy
RUN go build -o /t main/main.go main/inst_list.go
## Deploy
FROM gcr.io/distroless/base-debian10
ENV GO111MODULE=on
ENV GOOGLE_APPLICATION_CREDENTIALS='/usr/data/credentials/creds.json'
WORKDIR /
COPY --from=build /t /t
EXPOSE 8080
USER root:root
ENTRYPOINT ["/t"]
==================================================== ===============
然后我開始嘗試制作一個 Docker-compose.yml 文件,就像在該示例的末尾一樣。 它沒有 --mount 標志,但我找到了很多方法來指定安裝路徑。 我嘗試了更多,但在下面的代碼中留下了 3 個變體(注釋了 3 個中的 2 個):
version: '3.8'
services:
docker-t-roach:
depends_on:
- roach
build:
context: .
container_name: postgres-server
hostname: postgres-server
networks:
- mynet
ports:
- 80:8080
environment:
- PGUSER=${PGUSER:-totoro}
- PGPASSWORD=${PGPASSWORD:?database password not set}
- PGHOST=${PGHOST:-db}
- PGPORT=${PGPORT:-26257}
- PGDATABASE=${PGDATABASE-mydb}
deploy:
restart_policy:
condition: on-failure
roach:
image: cockroachdb/cockroach:latest-v20.1
container_name: roach
hostname: db
networks:
- mynet
ports:
- 26257:26257
- 8080:8080
volumes:
# - type: volume
# source: roach
# target: /usr/data
- roach:/usr/data
# - "${PWD}/cockroach-data/roach:/usr/data"
command: start-single-node --insecure
volumes:
roach:
networks:
mynet:
driver: bridge
它仍然不起作用。 此外,它還創建了 2 個卷:“roach”和“WORKDIRNAME_roach”。 我實際上試圖將我的文件夾復制到這兩個。 它不工作。 構建命令的 output 總是這樣:
postgres-server | STARTED AT
postgres-server | Sep 4 10:43:10
postgres-server | lstat /usr/data/assets/current_batch: no such file or directory
postgres-server | 2022/09/04 10:43:10 lstat /usr/data/assets/current_batch: no such file or directory
(前 2 個字符串是我的 go.files 產生的,'assets' 是我要復制的文件夾)我認為我在錯誤的位置:也許我復制文件夾的方式不適用於這種構建?
更新:同時命令
docker run -it --rm -v roach:/data ubuntu ls /data/usr
表明我的文件夾在那里。 但是容器處於一種不讓他看到它們的循環中。
米海想幫忙,但我不明白他的意思。 他實際上的意思是我必須增加我的應用服務的音量。 我現在做到了,它有效。 在下面的示例中,我為 db 和 app 命名了 2 個卷,只是為了提高准確性:
version: '3.8'
services:
docker-parser:
depends_on:
- roach
build:
context: .
container_name: parser
hostname: parser
networks:
- mynet
ports:
- 80:8080
volumes:
- assets:/data
environment:
- PGUSER=${PGUSER:-totoro}
- PGPASSWORD=${PGPASSWORD:?database password not set}
- PGHOST=${PGHOST:-db}
- PGPORT=${PGPORT:-26257}
- PGDATABASE=${PGDATABASE-mydb}
deploy:
restart_policy:
condition: on-failure
roach:
image: cockroachdb/cockroach:latest-v20.1
container_name: roach
hostname: db
networks:
- mynet
ports:
- 26257:26257
- 8080:8080
volumes:
- roach:/db
command: start-single-node --insecure
volumes:
assets:
roach:
networks:
mynet:
driver: bridge
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.