kac*_*ow6 1 amazon-web-services redis amazon-elasticache docker docker-compose
作为我的 CI 过程的一部分,我正在创建一个 docker-machine EC2 实例并通过 docker-compose 在其中运行 2 个 docker 容器。服务器容器测试脚本尝试连接到与 EC2 位于同一 VPC 中的 AWS elasticache redis 实例。运行测试脚本时,出现以下错误:
1) Storage
check cache connection
should return seeded value in redis:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/usr/src/app/test/scripts/test.js)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)
Run Code Online (Sandbox Code Playgroud)
更新:我可以通过 EC2 本身的 redis-cli 进行连接:
redis-cli -c -h ***.cache.amazonaws.com -p 6379 ping
> PONG
Run Code Online (Sandbox Code Playgroud)
看起来我无法连接到我的 redis 实例,因为我的 docker 容器使用的 IP 与我的 elasticache 实例不在同一个 VPC 内。在从远程映像构建容器时,如何设置我的 docker 配置以使用与主机相同的 IP?任何帮助,将不胜感激。
我的 docker-compose.yml 的相关部分:
version: '3.8'
services:
server:
build:
context: ./
dockerfile: Dockerfile
image: docker.pkg.github.com/$GITHUB_REPOSITORY/$REPOSITORY_NAME-server:github_ci_$GITHUB_RUN_NUMBER
container_name: $REPOSITORY_NAME-server
command: npm run dev
ports:
- "8080:8080"
- "6379:6379"
env_file: ./.env
Run Code Online (Sandbox Code Playgroud)
服务器容器 Dockerfile:
FROM node:12-alpine
# create app dir
WORKDIR /usr/src/app
# install dependencies
COPY package*.json ./
RUN npm install
# bundle app source
COPY . .
EXPOSE 8080 6379
CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)
我通过广泛的反复试验解决了这个问题。在 Docker 文档中找到了为我指明正确方向的主要提示:
默认情况下,容器会为其连接的每个 Docker 网络分配一个 IP 地址。IP 地址是从分配给网络的池中分配的...
Elasticache 实例只能从它们各自的 VPC 内部访问。根据我的配置,docker 容器和 ec2 实例在 2 个不同的 IP 地址上运行,但只有 EC2 IP 被列入白名单以连接到 Elasticache。
我必须将 docker 容器 IP 绑定到我的主机 EC2 IP,方法docker.compose.yml是将容器设置network_mode为"host":
version: '3.8'
services:
server:
image: docker.pkg.github.com/$GITHUB_REPOSITORY/$REPOSITORY_NAME-server:github_ci_$GITHUB_RUN_NUMBER
container_name: $REPOSITORY_NAME-server
command: npm run dev
ports:
- "8080:8080"
- "6379:6379"
network_mode: "host"
env_file: ./.env
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2005 次 |
| 最近记录: |