从 Vagrant 机器连接到 Redis Docker 容器
Connect to Redis Docker container from Vagrant machine
我们要从 Vagrant 搬到 Docker。
我们的首要目标是先将一些服务移出。在这种情况下,我试图在 docker 容器上托管一个 redis 服务器,并从我的流浪机器连接到它。
在 vagrant 机器上有一个 apache2 网络服务器托管一个 Laravel 应用程序
这是我正在努力解决的连接部分,目前我有
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
。结果 "Connection refused"
尝试 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 用于 Mac 和 docker 的版本 3 compose
您的尝试 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 从主机或您的 vagrant box 进行连接:
me@myshell:~/docker_compose_test $ redis-cli -h 172.18.0.2 -p 6379
172.18.0.2:6379> ping
PONG
我们能够使用纯粹的 docker compose 实现这一点,而根本没有用于 redis 的 docker 文件:
redis:
image: redis
container_name: redis
working_dir: /opt
ports:
- "6379:6379"
这样完成后,就可以使用
从 vagrant 文件中连接到 redis
redis-cli -h 10.0.2.2
或者如下laravel,虽然我们使用环境变量来设置这些)
'redis' => [
'client' => 'phpredis',
'default' => [
'host' => '10.0.2.2',
'password' => null,
'port' => 6379,
'database' => 0,
]
]
我们要从 Vagrant 搬到 Docker。
我们的首要目标是先将一些服务移出。在这种情况下,我试图在 docker 容器上托管一个 redis 服务器,并从我的流浪机器连接到它。
在 vagrant 机器上有一个 apache2 网络服务器托管一个 Laravel 应用程序
这是我正在努力解决的连接部分,目前我有
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
。结果 "Connection refused"
尝试 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 用于 Mac 和 docker 的版本 3 compose
您的尝试 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 从主机或您的 vagrant box 进行连接:
me@myshell:~/docker_compose_test $ redis-cli -h 172.18.0.2 -p 6379
172.18.0.2:6379> ping
PONG
我们能够使用纯粹的 docker compose 实现这一点,而根本没有用于 redis 的 docker 文件:
redis:
image: redis
container_name: redis
working_dir: /opt
ports:
- "6379:6379"
这样完成后,就可以使用
从 vagrant 文件中连接到 redisredis-cli -h 10.0.2.2
或者如下laravel,虽然我们使用环境变量来设置这些)
'redis' => [
'client' => 'phpredis',
'default' => [
'host' => '10.0.2.2',
'password' => null,
'port' => 6379,
'database' => 0,
]
]