我在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 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)中安装网络卷
我现在有一些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.yml
nginx.volumes
- ./client/bundle_client:/var/www/tg/static
我做错了什么以及如何让我的容器与nginx容器共享构建的静态内容?
PS:我阅读了所有文档,所有github问题和stackoverflow问答,据我所知它必须工作,没有信息什么时候不做.
UPD:结果docker volume inspect …
为什么 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) 我想构建一个基于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做一些不同的事情然后我也被使用了.目标是拥有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 …
我正在使用用作 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) 我有一个基于Thelia和Composer 的非常简单的 Dockerfile 。我想要它做的尽可能多的设置成为可能,所以为此,我安装composer
在PATH
容器内,然后尝试运行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
我的本地文件,以便它们在构建过程中可见?
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 卷来存储 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
?
在 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) docker-volume ×10
docker ×9
asp.net-core ×1
c# ×1
docker-build ×1
nginx ×1
permissions ×1
python ×1
sql-server ×1
sqlite ×1