我们正在从Vagrant迁移到Docker。
我们的首要目标是首先淘汰某些服务。在这种情况下,我试图将Redis服务器托管在Docker容器上,并从无业游民的机器连接到它。
在无业游民的计算机上,有一个托管Laravel应用程序的apache2网络服务器
这是我目前正在苦苦挣扎的连接部分
Dockerfile.redis
FROM redis:3.2.12
RUN redis-server
docker-compose.yml(串联)
version: '3'
services:
redis:
build:
context: .
dockerfile: Dockerfile.redis
working_dir: /opt
ports:
- "6379:6379"
我尝试了各种方法来连接到此:
尝试1
在Laravel的配置中使用主机ip 10.0.2.2
。导致“连接被拒绝”
尝试2
在docker compose中建立网络
redis:
build:
context: .
dockerfile: Dockerfile.redis
working_dir: /opt
network:
- app_net:
ipv4_address: 172.16.238.10
ports:
- "6379:6379"
networks:
app_net:
driver: bridge
ipam:
driver: default
- subnet: 172.16.238.0/24
这将导致超时。大多数解决方案似乎都需要在网络上配置网关,但这在docker compose 3中不可配置。
如果任何人都可以提供任何有用的指导,大多数指南都谈论在无业游民中而不是从无聊中连接到docker。
仅供参考-这是使用Docker for Mac和docker compose的第3版
答案 0 :(得分:1)
我们完全可以使用docker compose来实现此目的,而根本没有用于redis的dockerfile:
redis:
image: redis
container_name: redis
working_dir: /opt
ports:
- "6379:6379"
完成此操作后,便可以使用
从无业游民的文件中连接到Redis。redis-cli -h 10.0.2.2
或者在laravel中,如下所示,尽管我们使用环境变量进行设置)
'redis' => [
'client' => 'phpredis',
'default' => [
'host' => '10.0.2.2',
'password' => null,
'port' => 6379,
'database' => 0,
]
]
答案 1 :(得分:0)
您的尝试1 应该可以正常工作。当您创建服务而不定义网络时,docker-compose会自动创建一个桥接网络。例如:
对此运行docker-compose up
时:
version: '3'
services:
redis:
build:
context: .
dockerfile: Dockerfile.redis
working_dir: /opt
ports:
- "6379:6379"
docker-compose
创建一个名为<project name>_default
的桥接网络,在我的情况下为docker_compose_test_default
,如下所示:
me@myshell:~/docker_compose_test $ docker network ls
NETWORK ID NAME DRIVER SCOPE
6748b1ea4b85 bridge bridge local
4601c6ea30c3 docker_compose_test_default bridge local
80033acaa6e4 host host local
检查容器时,可以看到已经为其分配了IP:
docker inspect e6b196f952af
...
"Networks": {
"bridge": {
...
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
然后您可以使用此IP从主机或无聊的盒子进行连接:
me@myshell:~/docker_compose_test $ redis-cli -h 172.18.0.2 -p 6379
172.18.0.2:6379> ping
PONG