docker-compose:无法连接到 memcached 容器
docker-compose: Not able to connect to memcached container
我正在学习docker。我想在我的应用程序中添加缓存功能,因此使用 memcached。下面是我的 docker-compose.yml 文件
version: "3"
services:
app:
build: .
volumes:
- .:/project
command: 'rails s -b 0.0.0.0 -p 3000'
container_name: 'test_rails'
ports:
- 3000:3000
depends_on:
- database
links:
- memcached
database:
image: postgres:latest
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: docker-user
POSTGRES_PASSWORD: docker-password
POSTGRES_DB: docker-db
memcached:
build:
context: .
dockerfile: Dockerfile.memcached
command: 'tail -f /dev/null'
当我尝试使用以下代码
从 app
容器连接到位于 memcached
容器内的 memcached 服务器时
require 'dalli'
options = { :namespace => "app_v1", :compress => true }
dc = Dalli::Client.new('localhost:11211', options)
然后我得到以下错误
WARN -- : localhost:11211 failed (count: 0) Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 11211
Dalli::RingError: No server available
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/ring.rb:46:in `server_for_key'
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:367:in `perform'
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:130:in `set'
from (irb):4
from /usr/local/bin/irb:11:in `<main>'
谁能帮助我理解和解决这个问题。
变化:
dc = Dalli::Client.new('localhost:11211', options)
至:
dc = Dalli::Client.new('memcached:11211', options)
当您从 compose 设置容器时,它们都连接到 compose 创建的默认网络。 memcached
在这种情况下是 memcached
容器的 DNS 名称,将自动解析为容器 IP。
您无法使用本地主机从另一服务访问一个 docker 服务,因为每个服务都有自己的 IP 地址,并且喜欢自己的小型虚拟机。使用服务名称而不是本地主机,docker 将使用目标服务的 ip 地址解析它,
`dc = Dalli::Client.new('memcached:11211', options)`
我正在学习docker。我想在我的应用程序中添加缓存功能,因此使用 memcached。下面是我的 docker-compose.yml 文件
version: "3"
services:
app:
build: .
volumes:
- .:/project
command: 'rails s -b 0.0.0.0 -p 3000'
container_name: 'test_rails'
ports:
- 3000:3000
depends_on:
- database
links:
- memcached
database:
image: postgres:latest
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: docker-user
POSTGRES_PASSWORD: docker-password
POSTGRES_DB: docker-db
memcached:
build:
context: .
dockerfile: Dockerfile.memcached
command: 'tail -f /dev/null'
当我尝试使用以下代码
从app
容器连接到位于 memcached
容器内的 memcached 服务器时
require 'dalli'
options = { :namespace => "app_v1", :compress => true }
dc = Dalli::Client.new('localhost:11211', options)
然后我得到以下错误
WARN -- : localhost:11211 failed (count: 0) Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 11211
Dalli::RingError: No server available
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/ring.rb:46:in `server_for_key'
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:367:in `perform'
from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:130:in `set'
from (irb):4
from /usr/local/bin/irb:11:in `<main>'
谁能帮助我理解和解决这个问题。
变化:
dc = Dalli::Client.new('localhost:11211', options)
至:
dc = Dalli::Client.new('memcached:11211', options)
当您从 compose 设置容器时,它们都连接到 compose 创建的默认网络。 memcached
在这种情况下是 memcached
容器的 DNS 名称,将自动解析为容器 IP。
您无法使用本地主机从另一服务访问一个 docker 服务,因为每个服务都有自己的 IP 地址,并且喜欢自己的小型虚拟机。使用服务名称而不是本地主机,docker 将使用目标服务的 ip 地址解析它,
`dc = Dalli::Client.new('memcached:11211', options)`