首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Nginx公开Docker卷

向Nginx公开Docker卷
EN

Stack Overflow用户
提问于 2022-01-17 16:45:49
回答 2查看 626关注 0票数 2

我正在尝试将驻留在以下容器的坞卷中的Json文件连接到正在运行django项目的主坞容器中。

由于我正在使用Caprover,我的Docker组合选项非常有限。所以Docker Composer并不是一个真正的选择。我想用一个链接来代替通过网络公开json文件。

有点像domain.com/folder/jsonfile.json

有人能告诉我这个文件里面是否有可能吗?

我所使用的映像对于容器是至关重要的,所以我可以添加一个nginx映像吗?或者我是否需要做任何其他的更改来完成这个工作呢?

或者nginx甚至没有必要?

代码语言:javascript
复制
FROM ubuntu:devel
ENV TZ=Etc/UTC
ARG APP_HOME=/app
WORKDIR ${APP_HOME}
ENV DEBIAN_FRONTEND=noninteractive
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
RUN echo $TZ > /etc/timezone
RUN apt-get update && apt-get upgrade -y
RUN apt-get install gnumeric -y
RUN mkdir -p /etc/importer/data
RUN mkdir /voldata
COPY config.toml /etc/importer/
COPY datasets/* /etc/importer/data/
VOLUME /voldata
COPY importer /usr/bin/
RUN chmod +x /usr/bin/importer
COPY . ${APP_HOME}
CMD sleep 999d
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-20 09:13:37

在两个容器中使用相同的体积

码头工人-组成:

代码语言:javascript
复制
volumes: 
  shared_vol:
services:
  service1:
    volumes:
      - 'shared_vol:/path/to/file'
  service2:
    volumes:
      - 'shared_vol:/path/to/file'

上面的机制取代了自volumes_from以来的v3,但这也适用于v2:

代码语言:javascript
复制
volumes: 
  shared_vol:
services:
  service1:
    volumes:
      - 'shared_vol:/path/to/file'
  service2:
    volumes_from:
      - service1

如果您想避免无意中的更改,请添加:ro以便对目标服务进行只读:

代码语言:javascript
复制
  service1:
    volumes:
      - 'shared_vol:/path/to/file'
  service2:
    volumes:
      - 'shared_vol:/path/to/file:ro'

http-服务器

当然,您可以通过http (或其他协议)提供文件。有两个亮点:

包括到容器的http服务,(非常简单,取决于容器中已经给出的内容),例如使用nodejs,您可以非常容易地使用这个https://www.npmjs.com/package/http-server。尺寸不重要吗?所以只需安装:

代码语言:javascript
复制
RUN apt-get install -y nodejs npm
RUN npm install -g http-server
EXPOSE  8080
CMD ["http-server", "--cors", "-p8080", "/path/to/your/json"]

docker-compose (在8080上每次默认运行,因此打开这个):

代码语言:javascript
复制
existing_service:
    ports:
      - '8080:8080'

运行一个独立的http-服务器 (nginx,apache,..)在另一个容器中,但是您再次依赖于对两个服务使用相同的卷,因此对于本地解决方案来说,这是非常过分的。

基像

如果您没有很好的理由,我将永远不会使用像:devel, :rolling or :latest这样的东西作为基本图像。坚持使用LTS版本,而不是像ubuntu:22.04那样

http-server的测试

Dockerfile

代码语言:javascript
复制
FROM ubuntu:20.04

ENV TZ=Etc/UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update
RUN apt-get install -y nodejs npm
RUN npm install -g http-server@13.1.0 # Issue with JSON-File in V14: https://github.com/http-party/http-server/issues/634 
COPY ./test.json ./usr/wwwhttp/test.json
EXPOSE  8080
CMD ["http-server", "--cors", "-p8080", "/usr/wwwhttp/"]

# docker build -t test/httpserver:latest .
# docker run -p 8080:8080 test/httpserver:latest

免责声明:我不太熟悉节点-对接-图像,这只是给出一个快速的工作解决方案,并从那里继续。我没有在生产中使用nodeJS,但我确信它可以从胖到..。好吧..。相当胖。但对于快速成型来说,尺寸并不重要。

票数 1
EN

Stack Overflow用户

发布于 2022-01-17 17:47:14

如果您只想让两个容器访问同一个文件,只需使用带有--挂载的卷。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70744756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档