Aje*_*han 8 ruby-on-rails docker docker-compose
我docker-compose用来为开发人员提供环境.应用程序在docker-compose build命令上正常运行并在0.0.0.0:3000on docker-compose up命令上运行.当我尝试运行命令docker-compose run web rails g controller以生成带有操作的控制器时,生成的文件比没有在主机上编辑的权限.
Dockerfile
FROM ubuntu:14.04
FROM ruby:2.2.1
# Run updates
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
# Set up working directory
RUN mkdir /xyz/
WORKDIR /xyz/
# Set up gems
ADD Gemfile /xyz/Gemfile
ADD Gemfile.lock /xyz/Gemfile.lock
RUN bundle install
# Finally, add the rest of our app's code
# (this is done at the end so that changes to our app's code
# don't bust Docker's cache)
ADD . /xyz
Run Code Online (Sandbox Code Playgroud)
我甚至试图添加一个用户,xyzuser但没有工作.
# Create a user imliuser to run app that is not root
RUN useradd --create-home --home-dir /xyz --shell /bin/bash xyzuser
RUN chown -R xyzuser /xyz
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml
db:
image: postgres
ports:
- "5432"
redis:
image: redis
ports:
- "6379"
web:
build: .
command: bundle exec rails s -b 0.0.0.0
volumes:
- .:/xyz:rw
ports:
- "3000:3000"
links:
- db
- redis
Run Code Online (Sandbox Code Playgroud)
当我跑步时docker-compose build,也会收到警告don't run bundler as root.
我得到的另一个错误是当捆绑器开始安装gems时,作为公共git repo列出的gem无法安装.
gem 'workflow', :git => 'git@github.com:xyz/workflow.git',
:branch =>'feature_state_to_integer'
Run Code Online (Sandbox Code Playgroud)
得到以下错误.
Host key verification failed.
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
即使存储库是公开的
您将提出问题中的三个问题:
don't run bundle as root。Host key verification failed。在我的建议下面找到每个建议:
1)您可以访问主机系统中的任何文件root。因此,我假设您没有,但您的用户在docker组中,被允许运行docker命令。首先,找到该用户的用户ID:
id -u xyzuser
1000
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,用户ID为1000。然后,useradd以与发布相同的方式将命令添加到Dockerfile中,但添加一个附加参数(-u):
RUN useradd -u 1000 --create-home --home-dir /xyz --shell /bin/bash xyzuser
Run Code Online (Sandbox Code Playgroud)
最后,运行docker容器xyzuser(请参阅下一点)。因此,您已经使主机和docker容器都了解它们使用的是同一用户,而不只是两个具有相同名称的不同用户。
另外,您也可以使用 USER Dockerfile中指令在构建过程中指定用户,如删除答案中所述。
2)错误非常明显,您不能以root用户身份运行bundler,我想说您的解决方案是更改要在docker容器内运行命令的用户。您可以user在.yaml文件中使用参数进行更改。例:
web:
build: .
user: xyzuser
command: bundle exec rails s -b 0.0.0.0
volumes:
# Avoid to use relative paths during
# testing stage
- /abs/path/to/current:/xyz
ports:
- "3000:3000"
links:
- db
- redis
Run Code Online (Sandbox Code Playgroud)
3)要解决该Host key verification ...错误,您需要设法将主机添加到容器known_hosts文件中。这样做的方法如下:
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
在您的docker文件中,您可以添加以下行:
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
在宝石镶嵌之前。确保将主机密钥添加到将要连接到github的实际用户的.ssh目录中。
这样做的原因是因为您通过连接到github,ssh并且此协议使用“指纹”来标识客户端的服务器。如果您想了解更多有关此问题的信息,请查看Giles的答案:https : //unix.stackexchange.com/questions/42643/ssh-key-based-authentication-known-hosts-vs-authorized-keys
| 归档时间: |
|
| 查看次数: |
1486 次 |
| 最近记录: |