ruby-on-rails - Docker Ignore 不适用于 docker compose 和我的文件结构
问题描述
我正在设置一个新的 dockerfile 和 docker-compose.yml。我将在下面首先展示我的带有 rails 的文件结构,我想使用一个新的 .dockerignore 来忽略node_modules,.git。
我的 Docker版本是:Docker 版本 18.09.0,构建 4d60db4
我使用的 docker-compose.yml是v3
根目录
- Gemfile
- app
- bin
- cable
- db
- config
- lib
- node_modules
- public
- vendor
- docker
- app
- Dockerfile
- .git
- .gitignore
- .dockerignore
- docker-compose.yml
码头工人/应用程序/Dockerfile
FROM ruby:2.3.1
ARG RAILS_ROOT
RUN mkdir -p $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY . .
码头工人-compose.yml
version: '3'
services:
app:
build: &build_core
context: .
dockerfile: ./docker/app/Dockerfile
args:
- APP_NAME=myappname
- RAILS_ROOT=/var/www/${APP_NAME}_web
- RAILS_ENV=development
- RAILS_SERVE_STATIC_FILES=true
- RAILS_LOG_TO_STDOUT=true
- BUNDLE_OPTIONS=
- NPM_OPTIONS=
image: custom-web:1.0
container_name: app
volumes:
- .:/var/www/${APP_NAME}_web
env_file:
- .env
environment:
RAILS_ROOT: "/var/www/${APP_NAME}_web"
.dockerignore
.git/
node_modules/
我用下一个命令构建了我的图像
docker-compose build app
当我查看容器时,文件文件仍在复制到我的容器中
也许是上下文或者我应该把我的 .dockerignore 我也把我的 .dockerignore 放到 docker/app/.dockerignore 中,我也有同样的问题。
解决方案
在构建时,指令COPY . .
(在 内)正确复制所有未在(图像内)中Dockerfile
列出的文件。这里没问题(通过运行检查)。.dockerignore
$RAILS_ROOT
docker run --rm custom-web:1.0 ls -al
但是在这里您运行docker-compose
以启动容器,并且您已经定义了一个卷:
volumes:
- .:/var/www/${APP_NAME}_web
这意味着来自同一目录的文件docker-compose.yml
在主机和容器之间共享。这就是为什么.dockerignore
在$RAILS_ROOT
通过.custom-web:1.0
docker-compose
如果您确实需要在主机和容器之间共享文件(通过卷),我建议您将当前目录安装在您指定的位置以外的另一个位置Dockerfile
,例如:
volumes:
- .:/${APP_NAME}_web
否则,在这里使用COPY . .
和卷是多余的。
推荐阅读
- sql-server - 单个 SQL 表的多个 OrderID
- selenium - 如何使用相同的跑步者类为两个单独的黄瓜测试生成两个单独的宁静报告?
- apache-spark - 如何在pyspark中拆除CLOB?
- java - 如何使用可以使用不同值填充 HttpServletRequest 的 remoteUser 的 POSTMAN 模拟请求?
- ruby-on-rails - 从同一表单创建用户和帐户时,Rails 6 API Only 应用程序生成 422 请求
- linux - 将文本文件转换为 HTML 表格形式
- python - 基于使用熊猫的条件的值差异
- knn - rapids kneighborsclassifiers 和 kneighborsregressor 可以与 rapids 一起运行吗?
- javascript - 如何正确创建 LazyLoad es6 类?
- java - Mapstruct - 忽略嵌套类中的特定字段