[英]Make rails and sidekiq work together from different Docker containers (but can't use docker-compose)
[英]Can't access docker containers from host
我有一个使用以下Dockerfile的Rails服务的简单映像:
FROM ruby:2.4.4
MAINTAINER sadzid.suljic@gmail.com
RUN apt-get update && apt-get install -y \
build-essential \
nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install
COPY . ./
EXPOSE 3000
CMD ["rails", "s", "-p", "3000"]
我构建了图像,并使用以下命令运行了容器:
docker build -t chat/users .
docker run -P --name users_service chat/users
我在主机上有此输出:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23716591e656 chat/users "rails s -p 3000" 6 minutes ago Up 5 minutes 0.0.0.0:32774->3000/tcp users_service
$ lsof -n -i :32774 | grep LISTEN
com.docke 32891 ssuljic 18u IPv4 0x41c034d5d4627f5f 0t0 TCP *:filenet-re (LISTEN)
com.docke 32891 ssuljic 19u IPv6 0x41c034d5d3beb9b7 0t0 TCP [::1]:filenet-re (LISTEN)
$ curl localhost:32774
curl: (52) Empty reply from server
当我在容器内运行curl localhost:3000
,我会从API中得到正确的响应。
有谁知道为什么我无法从主机访问容器?
我在此版本的Mac上使用Docker:
$ docker -v
Docker version 18.03.1-ce, build 9ee9f40
默认情况下,某些版本的Rails绑定到localhost,这说明了为什么您可以从容器内部而不是主机(它被视为另一台主机)进行访问。
在CMD
指令中添加-b 0.0.0.0
应该可以解决该问题。
尝试:
docker run -p 3000:3000 --name users_service chat/users
这将映射3000到3000
http://localhost:3000
进一步研究这个问题,我认为这可能是Chrome问题,也可能是网络问题,因为我遇到的问题是:
这是我的解决方法:
确保您的/etc/hosts
文件具有127.0.0.1 localhost
(很有可能已经存在)
清除的Cookie和缓存的文件
清除主机缓存
转到: chrome://net-internals/#dns
点击清除主机缓存
重新启动Chrome
重置网络适配器注: 这不是故意的,因此不确定是否是此修复程序的一部分,但想以防万一。
不幸的是,我不确定哪一步可以解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.