指南针配置因 Docker 组合失败
Posted
技术标签:
【中文标题】指南针配置因 Docker 组合失败【英文标题】:Compass provision failing with Docker compose up 【发布时间】:2017-01-09 04:56:01 【问题描述】:控制台的错误输出:
/var/lib/gems/2.1.0/gems/compass-core- 1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:5:in `has?'
build-server_1 | [10:22:15] : undefined method `has?' for Sass::Util:Module (NoMethodError)
build-server_1 | from /var/lib/gems/2.1.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:9:in `included'
似乎缺少一个方法has
,但不确定要在此处添加到当前文件的哪个版本的 ruby 或 compass 或任何标志以防止这种情况:
# install ruby
RUN apt-get install -y -qq ruby-dev
RUN apt-get install make
RUN apt-get install rubygems -y
# install compass
RUN gem install --no-rdoc --no-ri compass
尝试将最后一行 ruby 替换为:
RUN apt-get install ruby-ffi -y
和
RUN apt-get install ruby-dev -y
和没有标志的指南针。
有什么建议吗?这适用于其他机器。我最近在这个特殊的版本上完成了全新的 Win 10 安装,并在我的机器上重新安装了 ruby,并将 env 路径设置为 C:\Ruby23-x64\bin 但没想到这会影响安装模块和在 docker 容器中运行。
码头文件
version: '2'
services:
node:
build:
context: .
dockerfile: docker/dockerfiles/node-dev
ports:
- "3000:3000"
expose:
- "3000"
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
volumes_from:
- submissions
environment:
- NODE_ENV=development
links:
- mongo
submissions:
build:
context: .
dockerfile: docker/dockerfiles/golang
volumes:
- /files
links:
- mongo
build-server:
build:
context: .
dockerfile: docker/dockerfiles/build-server
environment:
- NODE_ENV=development
volumes_from:
- node
links:
- node
ports:
- "8080:8080"
build-server-admin:
build:
context: .
dockerfile: docker/dockerfiles/build-server-admin
environment:
- NODE_ENV=development
volumes_from:
- node
mongo:
image: mongo
【问题讨论】:
包含您的完整 Dockerfile。 【参考方案1】:这必须与 sass 3.5 的发布有关。在安装 compass 之前,您需要安装正确版本的 sass。
RUN gem install --no-rdoc --no-ri sass -v 3.4.22
RUN gem install --no-rdoc --no-ri compass
【讨论】:
我最后不得不安装 sass 和 compass 我不得不运行gem uninstall sass
来删除之前安装的 sass 3.5。
如果你有多个版本的sass你需要卸载3.5所以在gem uninstall sass
之后提供要卸载的sass版本。【参考方案2】:
我今天在 docker 容器中遇到了类似的指南针问题:
[11:12:23] /var/lib/gems/2.1.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:5:in `has?'
[11:12:23] : undefined method `has?' for Sass::Util:Module (NoMethodError)
from /var/lib/gems/2.1.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:9:in `included'
from /var/lib/gems/2.1.0/gems/sass-3.5.0.pre.rc.1/lib/sass/script/functions.rb:632:in `include'
我已经通过添加我的 docker 文件来修复它
RUN gem install sass
我不确定这是不是最好的做法,但它解决了问题。
【讨论】:
没用,同样的错误很遗憾。这是在 docker-compose build 和 docker-compose up 之后。 我在启动容器时附加了错误。我在使用 docker-compose 创建容器时使用的 dockerfile 中添加了 sass install 命令(我使用的是竹子和 nexus)。您是否使用 CI 工具来构建您的容器?自定义回购?也许您可能在某处遇到某种缓存问题(因此某些依赖项没有从上一个版本中提取)?以上是关于指南针配置因 Docker 组合失败的主要内容,如果未能解决你的问题,请参考以下文章