Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在分离模式下运行此docker映像,并导出端口3000以便在本地查看?_Ruby On Rails_Docker - Fatal编程技术网

Ruby on rails 如何在分离模式下运行此docker映像,并导出端口3000以便在本地查看?

Ruby on rails 如何在分离模式下运行此docker映像,并导出端口3000以便在本地查看?,ruby-on-rails,docker,Ruby On Rails,Docker,我在网上看到的所有示例都使用docker compose,但我想尝试运行这个简单的rails应用程序,只使用docker run命令,不需要db 我想公开端口3000,这样我就可以在同一端口的浏览器中在笔记本电脑上本地查看它 到目前为止,我有这个Dockerfile: FROM ruby:2.6-alpine RUN apk update && apk --update add \ build-base \ nodejs \ postgresql-dev \ tzdat

我在网上看到的所有示例都使用docker compose,但我想尝试运行这个简单的rails应用程序,只使用docker run命令,不需要db

我想公开端口3000,这样我就可以在同一端口的浏览器中在笔记本电脑上本地查看它

到目前为止,我有这个Dockerfile:

FROM ruby:2.6-alpine

RUN apk update && apk --update add \
 build-base \
 nodejs \
 postgresql-dev \
 tzdata \
 imagemagick

# yarn
ENV PATH=/root/.yarn/bin:$PATH
RUN apk add --virtual build-yarn curl && \
    touch ~/.bashrc && \
    curl -o- -L https://yarnpkg.com/install.sh | sh && \
    apk del build-yarn


RUN mkdir /app
WORKDIR /app

RUN gem update --system
RUN gem install bundler


COPY Gemfile Gemfile.lock ./
RUN bundle install --binstubs

CMD ["./puma -C config/puma.rb"]
到目前为止,我能够使用以下工具创建docker映像:

docker build -t my-rails .

我应该使用什么命令来运行rails应用程序(已分离),现在暴露端口?

要在docker中运行应用程序,请运行以下命令

docker run -d -p 3000:8080(your app port) -v host_volume_or_directory:container_volume -t image_name:tag

只需根据需要更改端口,第一个端口将与主机ip一起使用以获取应用程序前端,或者这是一个公开端口。如果没有任何卷可装载,请从-v中删除卷部分-d表示分离模式。

我没有卷?不确定-v正在做什么。然后请删除-v host\u volume\u或\u directory:container\u volume part并运行我添加的主机类似于-v/path/to/rails/app:/app,但当我运行它并转到localhost:3000时,我刚刚收到一个错误localhost没有发送任何数据。你能在docker ps-a的输出中看到容器运行状态吗?您可以使用docker logs-f container_id检查日志吗?在我的例子中,我需要使用从192.168.x.x开始的docker ip地址,而不是localhost。请您检查一下您的docker是否在该Dockerfile中有专用IP地址,您需要将CMD拆分为多个单词CMD[puma,-C,config/puma.rb]或使用shell格式CMD puma-C config/puma.rb;在你现在拥有的形式中,它被视为一个引用的单词。根据需要,可以使用单独的节点容器;像.bashrc这样的shell点文件是Docker中不太好用的文件之一。