Fre*_*ers 11 docker docker-compose
bind我有一个用于共享本地目录的卷。有时该目录不存在并且 docker 退出并出现错误
Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /srv/share.
Run Code Online (Sandbox Code Playgroud)
如何告诉 docker-compose 查找源目录并在存在时使用它,或者如果源目录不存在则继续而不安装卷?
体积示例:
- type: bind
read_only: true
source: /srv/share/
target: /srv/share/
Run Code Online (Sandbox Code Playgroud)
我如何告诉 docker-compose 查找该目录并使用它(如果存在)或如果出现错误则在没有所述卷的情况下继续?
据我所知,您无法执行条件逻辑来安装卷,但我在我的一个项目中绕过了它,如下所示:
version: "2.1"
services:
elixir:
image: elixir:alpine
volumes:
- ${VOLUME_SOURCE:-/dev/null}:${VOLUME_TARGET:-/.devnull}:ro
Run Code Online (Sandbox Code Playgroud)
在这里我使用/dev/null作为后备,但在我的实际项目中我只是使用一个空文件来进行映射。
这${VOLUME_SOURCE:-/dev/null}就是 bash 使用未设置的变量的默认值的方式,并且 docker compose 支持它们。
$ sudo docker-compose run --rm elixir sh
/ # ls -al /.devnull
crw-rw-rw- 1 root root 1, 3 May 21 12:27 /.devnull
Run Code Online (Sandbox Code Playgroud)
创建.env文件:
$ printf "VOLUME_SOURCE=./testing \nVOLUME_TARGET=/testing\n" > .env && cat .env
VOLUME_SOURCE=./testing
VOLUME_TARGET=/testing
Run Code Online (Sandbox Code Playgroud)
创建用于测试目的的卷:
$ mkdir testing && touch testing/test.txt && ls -al testing
total 8
drwxr-xr-x 2 exadra37 exadra37 4096 May 22 13:12 .
drwxr-xr-x 3 exadra37 exadra37 4096 May 22 13:12 ..
-rw-r--r-- 1 exadra37 exadra37 0 May 22 13:12 test.txt
Run Code Online (Sandbox Code Playgroud)
运行容器:
$ sudo docker-compose run --rm elixir sh
/ # ls -al /testing/
total 8
drwxr-xr-x 2 1000 1000 4096 May 22 12:01 .
drwxr-xr-x 1 root root 4096 May 22 12:07 ..
-rw-r--r-- 1 1000 1000 0 May 22 12:01 test.txt
/ #
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |