我在从本地机器访问容器化的rails应用程序时遇到了麻烦,我将this快速入门指南作为模板,并对gemfile和gemfile. lock的路径做了一些调整,快速入门指南转到了docker-compose,但我想尝试在没有它的情况下访问应用程序,以便在继续之前熟悉这些过程。
这是我的dockerfile:
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler -v 2.0.1
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000:3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
这是一个入口点文件
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
我能够成功地构建和运行映像,但当我尝试访问0.0.0.0:3000时,我收到无法连接错误。x1c 0d1x
我还附上了我的应用程序目录结构的截图,Dockerfile和入口点在根目录下。
有一件事看起来很奇怪,当我试图运行容器的日志时,我没有得到任何输出,但当我关闭容器时,我看到了启动日志。不知道这是为什么。
我正在运行Docker桌面2.1.0.3。任何想法/帮助都非常感谢。
2条答案
按热度按时间92dk7w1h1#
使用仅仅
EXPOSE 3000
在dockerfile.运行容器ror
与Map端口到本地主机从你的新docker图像<image>
现在您应该能够访问
localhost:3000
zdwk9cvp2#
下面是我的一个成功的例子:
1.普通的文件夹,没什么特别的。
1.然后,在docker-composite.yml中添加环境变量,或将DATABASE_URL放入.env文件(重要的一点是使用主机.docker.internal而不是localhost
1.然后在database.yml中,使用ENV键指定url
然后通过运行docker-composition up启动容器
停靠文件
停靠-编写.yml
数据库.yml