在 $PATH 中找不到 docker 可执行文件 [英] docker executable file not found in $PATH

查看:39
本文介绍了在 $PATH 中找不到 docker 可执行文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在正在运行的 docker compose 容器上运行 rails 迁移会引发此错误:

$ docker-compose run webapp rails db:migrate

<块引用>

错误:无法启动服务 webapp:头字段值无效oci 运行时错误:container_linux.go:247:启动容器进程导致 "exec: \"rails\": 在 $PATH 中找不到可执行文件" "

但是,我可以从容器内部访问导轨:

$ docker-compose run webapp bashroot@3fd3a87275a1:/home/app/webapp# which rails/usr/local/rvm/gems/ruby-2.3.1/bin/rails

我的容器已经在运行,我可以获取页面:

$ curl http://localhost -iHTTP/1.1 200 正常内容类型:文本/html;字符集=utf-8传输编码:分块连接:保持连接状态:200 OK缓存控制:max-age=0,私有,必须重新验证ETag:带b62d4f67b7b823c017534cd9727752cd"X-Frame-Options: SAMEORIGINX-XSS-保护:1;模式=块X-Content-Type-Options: nosniffX-运行时间:0.019881X 请求 ID:eb32ec21-3a8f-4caa-a27b-2e42f0b2bce9日期:2016 年 12 月 15 日星期四 15:15:59 GMTX-Powered-By:Phusion 乘客 5.0.29服务器:nginx/1.10.1 + Phusion 乘客 5.0.29

如何在我的容器中运行 rails db:migrate?

Dockerfile

FROM phusion/passenger-ruby23# 设置正确的环境变量.环境主页/root# 使用baseimage-docker的init进程.CMD ["/sbin/my_init"]# 附加包运行 apt-get 更新# 活跃的 nginx运行 rm -f/etc/service/nginx/down# 安装宝石包工作目录/tmp添加 Gemfile/tmp/添加 Gemfile.lock/tmp/运行捆绑安装# 复制nginx模板进行配置并保留环境变量运行 rm/etc/nginx/sites-enabled/default# 添加nginx站点和配置添加 webapp.conf/etc/nginx/sites-enabled/webapp.conf运行 mkdir/home/app/webapp复制 ./家/应用程序/网络应用程序运行 usermod -u 1000 应用程序运行 chown -R app:app/home/app/webapp工作目录/home/app/webapp# 完成后清理 APT.运行 apt-get clean &&rm -rf/var/lib/apt/lists/*/tmp/*/var/tmp/*曝光 80

Docker Compose

版本:'2'服务:网络应用程序:建造: .容器名称:myapp工作目录:/home/app/webapp端口:- 80:80"环境:- PASSENGER_APP_ENV=开发卷:- .:/home/app/webapp网络:- 后端D b:容器名称:db图片:postgres:9.4网络:- 后端网络:后端:司机:桥

解决方案

我不知道为什么会这样,我已经提交了一个 issue,但与此同时,这里有一个解决方法:

docker-compose run webapp bundle exec rails db:migrate

请以正确的方式回答这个问题,我会接受你的回答.

Trying to run a rails migration on a running docker compose container throws this error:

$ docker-compose run webapp rails db:migrate

ERROR: Cannot start service webapp: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused "exec: \"rails\": executable file not found in $PATH" "

However, I can access rails from inside the container:

$ docker-compose run webapp bash
root@3fd3a87275a1:/home/app/webapp# which rails
/usr/local/rvm/gems/ruby-2.3.1/bin/rails

My container is already running and I can GET the page:

$ curl http://localhost -i
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Status: 200 OK
Cache-Control: max-age=0, private, must-revalidate
ETag: W/"b62d4f67b7b823c017534cd9727752cd"
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Runtime: 0.019881
X-Request-Id: eb32ec21-3a8f-4caa-a27b-2e42f0b2bce9
Date: Thu, 15 Dec 2016 15:15:59 GMT
X-Powered-By: Phusion Passenger 5.0.29
Server: nginx/1.10.1 + Phusion Passenger 5.0.29

How do I run rails db:migrate in my container?

Dockerfile

FROM phusion/passenger-ruby23

# Set correct environment variables.
ENV HOME /root

# Use baseimage-docker's init process.
CMD ["/sbin/my_init"]

# additional packages
RUN apt-get update

# Active nginx
RUN rm -f /etc/service/nginx/down

# Install bundle of gems
WORKDIR /tmp
ADD Gemfile /tmp/
ADD Gemfile.lock /tmp/
RUN bundle install

# Copy the nginx template for configuration and preserve environment variables
RUN rm /etc/nginx/sites-enabled/default

# Add the nginx site and config
ADD webapp.conf /etc/nginx/sites-enabled/webapp.conf

RUN mkdir /home/app/webapp
COPY . /home/app/webapp
RUN usermod -u 1000 app
RUN chown -R app:app /home/app/webapp
WORKDIR /home/app/webapp

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
EXPOSE 80

Docker Compose

version: '2'
services:
  webapp:
    build: .
    container_name: myapp
    working_dir: /home/app/webapp
    ports:
      - "80:80"
    environment:
      - PASSENGER_APP_ENV=development
    volumes:
      - .:/home/app/webapp
    networks:
      - back-end
  db:
    container_name: db
    image: postgres:9.4
    networks:
      - back-end
networks:
  back-end:
    driver: bridge

解决方案

I don't know why this is happening, and I've filed an issue, but in the meantime, here's a workaround:

docker-compose run webapp bundle exec rails db:migrate

Please answer this question with a proper fix, and I'll accept your answer.

这篇关于在 $PATH 中找不到 docker 可执行文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆