docker-compose如何引用其他目录中的文件

2024-02-14

有这个 dockerfile:

FROM python:3.8.3-alpine

ENV MICRO_SERVICE=/home/app/microservice
# RUN addgroup -S $APP_USER && adduser -S $APP_USER -G $APP_USER
# set work directory


RUN mkdir -p $MICRO_SERVICE
RUN mkdir -p $MICRO_SERVICE/static

# where the code lives
WORKDIR $MICRO_SERVICE

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev gcc python3-dev musl-dev \
    && apk del build-deps \
    && apk --no-cache add musl-dev linux-headers g++
# install dependencies
RUN pip install --upgrade pip
# copy project
COPY . $MICRO_SERVICE
RUN pip install -r requirements.txt
COPY ./entrypoint.sh $MICRO_SERVICE

CMD ["/bin/bash", "/home/app/microservice/entrypoint.sh"]

以及以下 docker-compose.yml 文件:

version: "3.7"

services:
  nginx:
    build: ./nginx
    ports:
      - 1300:80
    volumes:
      - static_volume:/home/app/microservice/static
    depends_on:
      - web
    restart: "on-failure"
  web:
    build: . #build the image for the web service from the dockerfile in parent directory
    command: sh -c "python manage.py collectstatic --no-input &&
      gunicorn djsr.wsgi:application --bind 0.0.0.0:${APP_PORT}"
    volumes:
      - .:/microservice:rw # map data and files from parent directory in host to microservice directory in docker containe
      - static_volume:/home/app/microservice/static
    env_file:
      - .env
    image: wevbapp

    expose:
      - ${APP_PORT}
    restart: "on-failure"

volumes:
  static_volume:


我需要引用其他目录中的以下文件(在 docker-compose.yml 文件中)而不是.devcontainer:

  • 管理.py
  • 要求.txt
  • .env

这是我的文件夹结构:

一个简单的解决方案是将docker文件, docker-compose.yml, and .env在 django 目录中djsr,但我试图保持文件的结构像这样。我怎样才能引用这些文件docker-compose.yml?


将几个与 Docker 相关的文件放在项目根目录中是相当常见的,这可能会为您省去一些麻烦;我建议将其作为首选。

如果您确实想将其全部保存在子目录中,那么这是可能的。当你跑步时docker-compose, 你可以指定配置文件的位置 https://docs.docker.com/compose/reference/overview/#specifying-a-path-to-a-single-compose-file。它将认为所有路径都是相对于该文件的目录的。

# Either:
docker-compose -f .devcontainer/docker-compose.yml up
cd .devcontainer && docker-compose up

当您构建映像时,构建会读取上下文目录, and COPY语句总是相对于该目录进行解释。对于您的设置,您需要将上下文目录置于源代码树的顶部,然后在子目录中指定备用 Dockerfile。

services:
  web:
    build:
      context: ..
      dockerfile: .dockerenv/Dockerfile

大多数情况下,Dockerfile 本身没问题,但如果入口点脚本位于子目录中,则COPY命令也需要反映这一点。由于您要复制整个源目录,因此您还可以将图像内的内容重新排列为您想要的布局。

COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . ./
# Either:
COPY .dockerenv/entrypoint.sh ./
# Or:
RUN mv .dockerenv/entrypoint.sh .
# Or:
CMD ["./dockerenv/entrypoint.sh"]

我不推荐您拥有的卷结构,但如果您想保留它,您还需要将绑定挂载的源路径更改为父目录。 (特别注意,在前面的 Dockerfile 片段中,有几个选项涉及在映像内移动文件,并且绑定挂载将隐藏该更改。)

services:
  web:
    volumes:
      # Ignore the application built into the container, and use
      # whatever's checked out on the host system instead.
      - ..:/home/app/microservice
      # Further ignore the static assets on the host system and
      # use the content in a named volume instead.
      - static_volume:/home/app/microservice/static
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker-compose如何引用其他目录中的文件 的相关文章

随机推荐

  • OpenCV / SURF 如何从描述符中生成图像哈希/指纹/签名?

    这里有一些主题对于如何查找相似图片非常有帮助 我想做的是获取图片的指纹 并在数码相机拍摄的不同照片上找到相同的图片 SURF 算法似乎是独立于缩放 角度和其他扭曲的最佳方法 我使用 OpenCV 和 SURF 算法来提取样本图像上的特征 现
  • 将 Arduino Uno 与以太网扩展板连接到 parse.com 数据库

    嘿 我是 Arduino 编程新手 我想知道如何连接我的设备以将数据存储到 parse com 我知道 REST API 密钥 但不知道该怎么做 任何帮助将不胜感激 如果可能的话您可以提供源代码或示例 Thanks 现在这是可能的 Ardu
  • 什么是 Base64 明文用户名和密码?

    最近我在一篇基础认证文章中看到了这个词 网络上的 Base64 明文用户名和密码意味着什么 Thanks 在 HTTP 基本身份验证中 密码 用户名 以 Base64 编码 由于它没有加密 所以它是明文的 这是一个示例授权标头 Author
  • Knockoutjs 嵌套 observableArrays

    我在淘汰嵌套可观察数组方面遇到一些麻烦 我的数据如下所示 var myData Id 123 Name string here Categories Id 12 Name Category Name Products Id 1 Name P
  • 在图像下方显示文本

    我有一个带有超链接的图像 并且想在图像下方显示文本 编辑 我的输出应该像在记分卡下一样 我需要看到一张图像 谷歌 及其下方的文本 而在仪表板下 我需要看到两张图像 亚马逊 微软 及其下方的文本 下图是我所期待的 看图片 https i st
  • 覆盖没有默认值的 CSS 属性

    如果 CSS 中的属性没有默认值 是否可以覆盖该属性 例如 假设您的主样式表定义了特定元素的边框 element border 1px solid 000 如果您想禁用辅助样式表的边框 您可以这样做 element border none
  • WordPress图片上传使用ajax?

    我正在 WordPress 中制作前端分析器 我想从前端上传用户照片 我的整个个人资料都在 WordPress ajax 上 我只是想将照片上传到wp content uploads 但从前面使用ajax 我想要两件事 1 媒体挂钩 2 通
  • Spring Security中WebExpressionVoter和AuthenticatedVoter的区别

    Spring Security中的WebExpressionVoter和AuthenticatedVoter有什么区别 我所知道的是 AuthenticatedVoter 将搜索字符串 IS AUTHENTICATED FULLY IS A
  • 键入:从有效值列表动态创建文字别名

    我有一个函数验证其参数以仅接受给定的有效选项列表中的值 在打字方面 我使用Literal输入别名 如下所示 from typing import Literal VALID ARGUMENTS foo bar Argument Litera
  • C 猜数字游戏,使用 isdigit() 验证

    我正在研究教科书上的一个挑战问题 我应该生成一个 1 10 之间的随机数 让用户猜测 并使用 isdigit 验证他们的响应 我 大部分 让程序与下面的代码一起工作 我遇到的主要问题是 使用 isdigit 需要将输入存储为字符 然后我必须
  • 在处理给定的数据集时,如何为 zlib 'setDictionary' 找到一个好的/最佳的字典?

    我有一组 大量 类似的数据文件 该集合正在不断增长 单个文件大小约为10K 每个文件必须单独压缩 压缩是通过 zlib 库完成的 该库由java util zip Deflater班级 当使用以下方式将字典传递给 Deflate 算法时se
  • ElasticSearch 是用于自动完成\提前输入的 edgeNGram,我的 search_analyzer 是否被忽略

    我有三个带有 userName 字段的文档 布里安迪利 布里昂布尔 布里安格里芬 当我搜索 brian 时 我会按预期返回所有三个 但是当我搜索 briandilley 时 我仍然会返回所有三个 分析 API 告诉我它在我的搜索字符串上使用
  • 随着窗口大小的调整而向上移动图像或 Div?

    我的 html 中有一个带有 stretch 类的图像 目前 使用 css 该图像的大小会随着窗口大小的调整而调整为屏幕宽度的 100 我还希望它在调整窗口大小时向上移动 我假设这可以用 jQuery 来完成 但我不太确定 基本上 顶部 C
  • 如何预选struts html:radio按钮

    如何预选struts 1 html radio按钮 谢谢 玛丽亚 你应该有自己的价值Form保存单选按钮数据的对象 您需要将其预先填写在您的Form在转发到 JSP 之前 或者默认在Form的构造函数 如果它始终默认为该值 动作 java
  • Google 地图 javascript API 中的“我的位置”

    有没有办法使用存在于上的 我的位置 按钮谷歌地图 http maps google com 在你自己的 webbapplication 中使用 javascript api 吗 我在这里阅读了有关添加控件的内容Google 地图 Javas
  • 使用引用 MySQL 中相同表的子查询的 SQL UPDATE

    我正在尝试使用 UPDATE 更新表中一堆行中的列值 问题是我需要使用子查询来导出该列的值 并且它依赖于同一个表 这是查询 UPDATE user account student SET student student education
  • 似乎无法解析 KeyedByTypeCollection?

    我正在使用 NET 可移植来创建一个库 并且在尝试创建 KeyedByTypeCollection 的实例时遇到了一些问题 我检查了我的参考资料 NET Portable Subset System Collections Generic
  • React Native - SQLite 找不到预填充的数据库文件

    我正在尝试使用https github com andpor react native sqlite storage https github com andpor react native sqlite storage对于 SQLite
  • 我们如何在没有第三个变量和算术运算符的情况下交换两个数字?

    我们如何在没有第三个变量和算术运算符的情况下交换两个数字 XOR算不算算术运算符 如果没有 那么 X X XOR Y Y X XOR Y X X XOR Y 将此伪代码转换为可编译的 Java 代码作为练习留给读者 关于 java 标签
  • docker-compose如何引用其他目录中的文件

    有这个 dockerfile FROM python 3 8 3 alpine ENV MICRO SERVICE home app microservice RUN addgroup S APP USER adduser S APP US