标签: docker-volume

Docker Anonymous Volumes

我在docker-compose.yml文件中看到了Docker卷定义,如下所示:

-v /path/on/host/modules:/var/www/html/modules
Run Code Online (Sandbox Code Playgroud)

我注意到Drupal的官方图片,他们的docker-compose.yml文件使用的是匿名卷.

注意评论:

volumes:
  - /var/www/html/modules
  - /var/www/html/profiles
  - /var/www/html/themes
  # this takes advantage of the feature in Docker that a new anonymous
  # volume (which is what we're creating here) will be initialized with the
  # existing content of the image at the same location
  - /var/www/html/sites
Run Code Online (Sandbox Code Playgroud)

有没有办法在容器运行后将匿名卷与主机上的路径相关联?如果没有,拥有匿名卷的重点是什么?

完整的docker-compose.yml示例:

version: '3.1'

services:

  drupal:
    image: drupal:8.2-apache
    ports:
      - 8080:80
    volumes:
      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      # this takes advantage …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-volume

8
推荐指数
3
解决办法
3475
查看次数

Docker在Windows上将网络驱动器作为卷添加

我正在尝试将网络驱动器安装为卷。这是我正在尝试的命令

docker run -v //NetworkDirectory/Folder:/data alpine ls /data
Run Code Online (Sandbox Code Playgroud)

我在Windows上运行此命令,并且数据目录显示为空。如何在Windows主机上将该网络目录作为卷挂载并在容器内访问它?

使用本地目录可以正常工作,因此以下命令可以正常工作。

docker run -v c:/Users/:/data alpine ls /data
Run Code Online (Sandbox Code Playgroud)

我可以使其在Linux中工作,因为我可以将cifs-utils共享安装在本地目录上,并将该目录用作卷。

编辑:看起来这是不可能的:如何在Docker for Windows(Windows 10)中安装网络卷

docker docker-volume

8
推荐指数
2
解决办法
5800
查看次数

Docker - 无法在卷内的容器之间共享数据(docker-compose 3)

我现在有一些Web应用程序的容器(nginx,gunicorn,postgres和节点从源代码构建静态文件和React服务器端呈现).在节点容器的Dockerfile中,我有两个步骤:构建和运行(Dockerfile.node).它最终在容器内有两个目录:bundle_client- 是nginx的静态和bundle_server- 它在节点容器本身用于启动快速服务器.

然后我需要bundle_client与nginx容器共享一个内置的静态文件夹().要根据我的docker -compose参考这样做,docker-compose.yml我有以下服务(参见完整的docker-compose.yml):

node:
  volumes:
    - vnode:/usr/src

nginx:
  volumes:
    - vnode:/var/www/tg/static
  depends_on:
    - node
Run Code Online (Sandbox Code Playgroud)

和数量:

volumes:
  vnode:
Run Code Online (Sandbox Code Playgroud)

运行docker-compose build完成且没有错误.运行docker-compose up运行每一个好,我可以打开localhost:80,有nginx,gunicorn和节点表达SSR都工作得很好,我可以看到一个网页,但所有静态文件返回404未找到错误.

如果我检查卷,docker volume ls我可以看到两个新创建的卷tg_vnode(我们在这里考虑)和tg_vdata(参见完整的docker-compose.yml)

如果我进入一个nginx容器,docker run -ti -v /tmp:/tmp tg_node /bin/bash我看不到我的www/tg/static文件夹应该从节点卷映射我的静态文件.此外,我尝试/var/www/tg/static使用nginx容器创建一个空文件夹,Dockerfile.nginx但它保持为空.

如果我在一个部分中映射bundle_client主机上的文件夹,因为它工作正常,我可以在浏览器中看到所有静态文件与nginx一起提供.docker-compose.ymlnginx.volumes- ./client/bundle_client:/var/www/tg/static

我做错了什么以及如何让我的容器与nginx容器共享构建的静态内容?

PS:我阅读了所有文档,所有github问题和stackoverflow问答,据我所知它必须工作,没有信息什么时候不做.

UPD:结果docker volume inspect …

docker docker-compose docker-volume

8
推荐指数
1
解决办法
3682
查看次数

Docker 以 root 身份挂载卷

为什么 Docker 将卷挂载为root,而不是已运行命令的用户docker run?这可以通过设置一些参数/参数等来改变吗?

MWE:

$ ls -la
drwxr-xr-x 2 ubuntu   ubuntu   4096 Aug 22 18:09 shinylog

$ docker run -v $(pwd)/test_dir/:/home/ --name nginx -d nginx
bf340face11485a81ee7c208d490f11abbdc84089ffe9c01d71ffcf8b9ffc27d

$ ls -la
drwxr-xr-x 2 ubuntu   ubuntu   4096 Aug 22 18:09 shinylog
drwxr-xr-x 2 root     root   4096 Aug 22 18:33 test_dir

$ echo $USER
ubuntu
Run Code Online (Sandbox Code Playgroud)

编辑:安装 docker 后我遇到错误:

Got permission denied while trying to connect to the Docker 
daemon socket at unix:///var/run/docker.sock: Get 
http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/json: dial 
unix /var/run/docker.sock: connect: permission …
Run Code Online (Sandbox Code Playgroud)

permissions docker docker-volume

8
推荐指数
2
解决办法
6440
查看次数

在构建期间复制 docker 镜像中的文件

我想构建一个基于dockerage/apache-mellon 的 docker镜像,它的卷在/var/www. 我想在 docker 容器中构建我的 web 应用程序,当我在临时目录中构建它时/var/www,然后在我的 Dockerfile 中使用以下命令将文件复制到:

WORKDIR /tmp
COPY . /tmp
RUN ./node_modules/gulp/bin/gulp.js
RUN cp -R /tmp/dist/ /var/www
Run Code Online (Sandbox Code Playgroud)

docker 构建过程完成且没有任何错误,但文件不会被复制到/var/www. 有没有办法将文件复制到在构建过程中声明为 docker volume 的位置?

docker docker-build docker-volume

7
推荐指数
1
解决办法
6537
查看次数

命名Docker卷以共享构建不更新

我正在为我正在工作的公司的开发人员询问我与Docker做一些不同的事情然后我也被使用了.目标是拥有2个具有以下职责的容器:

容器A:将构建前端反应应用程序并将包放入名为的目录的节点容器app/dist/.完成后,容器将停止运行.

容器B:一个高山的nginx容器,它将从中提供静态文件/usr/share/nginx/html/app.

其中已建成的容器中的文件将使用体积将挂载提供给容器B <Container A>/app/dist<Container B>/usr/share/nginx/html/app.

请注意,公共可访问端口和容器调用的nginx容器之间有一个HAProxy层app.

上面的任务是使用docker compose文件编排的,如下所示:

version: '2'
volumes:
  webapp_build_volume: {}
services:
  webapp_build:
    build:
      context: .
      dockerfile: 'config/nginx/dockerfile-builder'
    volumes:
      - webapp_build_volume:/app/dist
      - webapp_static_volume:/app/src/app/static
  app:
    build:
      context: 'config/haproxy'
      dockerfile: 'dockerfile-app-haproxy'
    links:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - '80:80'
      - '1936:1936'
  web:
    build:
      context: .
      dockerfile: 'config/nginx/dockerfile-web'
    environment:
      - EXCLUDE_PORTS=443
      - VIRTUAL_HOST=*
    depends_on:
      - webapp_build
    volumes:
       - webapp_build_volume:/usr/share/nginx/html/app
Run Code Online (Sandbox Code Playgroud)

这仅在第一次构建docker compose文件时才有效.创建卷后,卷中的文件不再更新.我已经读过,命名卷在建立之后无法更新,但我无法确认.我找到了涉及运行的工作,docker-compose rm --force && docker volume webapp_build rm …

nginx docker docker-compose docker-volume

7
推荐指数
1
解决办法
891
查看次数

Docker 卷 - 需要写入数据库的权限

我正在使用用作 REST API 的烧瓶服务器(在带有 python 3.5 的 virtualenv 中)(仅用于按照烧瓶的建议进行开发)。一开始,它连接到本地 sqlite 数据库,并会尽快提交任何 db 更改。现在我想在 docker 容器中运行所有东西,我想知道如何访问数据库,因为 sqlite 文件位于容器中。

所以我在 docker-compose 文件中创建了一个卷,它指向构建应用程序的 dockerfile。

Dockerfile:

FROM python:latest
ENV HOME /home/parkrep
WORKDIR $HOME
ADD requirements.txt $HOME/requirements.txt
RUN pip install -r requirements.txt
ADD . $HOME
EXPOSE 80
CMD ["python", "server.py"]
Run Code Online (Sandbox Code Playgroud)

.dockerignore

__pycache__
venv
.gitignore
.dockerignore
README.md
Dockerfile
docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '2'
services:
  parkrep:
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - ./output:/home/parkrep/output
    command: ["python", "server.py"]
    ports:
      - "80:80"
Run Code Online (Sandbox Code Playgroud)

如果我运行,docker-compose up我会得到以下信息

parkrep_1  |   File "/home/parkrep/db_connector.py", …
Run Code Online (Sandbox Code Playgroud)

python sqlite docker docker-compose docker-volume

7
推荐指数
1
解决办法
5148
查看次数

为什么 composer 在我的 Docker 容器中找不到 composer.json 文件?

我有一个基于TheliaComposer 的非常简单的 Dockerfile 。我想要它做的尽可能多的设置成为可能,所以为此,我安装composerPATH容器内,然后尝试运行composer install。但是,此时,容器中似乎还不存在我的本地/挂载文件(请参阅RUN echo pwd: ...下面的输出)。

构建失败并显示以下错误消息:

Composer 在 /var/www/html 中找不到 composer.json 文件

要初始化项目,请按照https://getcomposer.org/ “入门”部分中的说明创建 composer.json 文件

错误:服务“web”无法构建:命令“/bin/sh -c composer install”返回非零代码:1

请注意,在没有RUN composer install指令的情况下构建然后运行是docker-compose exec web composer install有效的。

docker-compose.yml 中声明的 mount 是否在镜像完全构建后生效?我是否需要明确地显示COPY我的本地文件,以便它们在构建过程中可见?

Dockerfile:

FROM php:5.6-apache
COPY docker-php-pecl-install /usr/local/bin/

RUN apt-get update && apt-get install -y \
 libfreetype6-dev \
 libjpeg62-turbo-dev \
 libmcrypt-dev \
 libpng12-dev \
 libicu-dev \
 git \
 zip …
Run Code Online (Sandbox Code Playgroud)

docker docker-volume

7
推荐指数
1
解决办法
1万
查看次数

如何将文件复制到 Docker 卷并通过 docker-compose 使用该卷

  • Docker 容器中运行着一个 Web 服务。
  • 该 Web 服务依赖于大 json 文件来启动。

我创建了一个 Docker 卷来存储 json 文件docker volume create my-api-files

这是docker-compose网络服务的文件:

version: '3'

services:
  my-api:
    image: node:alpine
    expose:
      - ${NODE_PORT}
    volumes:
      - ./:/api
      - my-api-files:/files
    working_dir: /api
    command: npm run start

volumes: 
  my-api-files: 
    external: true
Run Code Online (Sandbox Code Playgroud)

现在,如何my-api-files在启动 Web 服务之前将 json 文件复制到 docker 卷docker-compose up

docker docker-compose docker-volume

7
推荐指数
1
解决办法
1万
查看次数

使用 Docker 卷持久保存 mcr.microsoft.com/mssql/server:2019-latest 的容器时权限被拒绝

在 Windows 10 上,使用 Docker 桌面版本 2.1.0.5。

我已经成功使用该图像microsoft/mssql-server-linux:2017-latest,但由于它已被弃用,我将其更改为mcr.microsoft.com/mssql/server:2019-latest我遇到问题的地方。

我将数据库服务定义为:

version: '3.4'

services:

  sql.data:
    container_name: tvq_db
    image: mcr.microsoft.com/mssql/server:2019-latest

    environment:
      - SA_PASSWORD=Pass_word
      - ACCEPT_EULA=Y

    ports:
      - "1433:1433"

    volumes:
      - ${APPDATA}/MyServiceDB/mssql:/var/opt/mssql
Run Code Online (Sandbox Code Playgroud)

使用此设置,我的 ASP.NET Core 应用程序无法连接到数据库服务,当我检查数据库容器的日志时,我看到许多Permission denied错误。日志如下:

This program has encountered a fatal error and cannot continue running at Thu Jan 23 19:35:01 2020
SQL Server 2019 will run as non-root by default.
The following diagnostic information is available:

         Reason: 0x00000006
This container is running as …
Run Code Online (Sandbox Code Playgroud)

c# sql-server docker-compose docker-volume asp.net-core

7
推荐指数
2
解决办法
7815
查看次数