我正在尝试在开发中的docker容器中运行fake_sqs gem来测试我的SQS集成,并让另一个应用程序向它发送消息。
我的docker-compose文件如下所示:
app:
build: .
command: bundle exec rails s Puma --port 3000 --binding 0.0.0.0
volumes:
- ./:/app
ports:
- 3000:3000
links:
- db:db
environment:
VIRTUAL_HOST: app.docker
PGHOST: db
PGUSER: postgres
AWS_REGION: us-west-2
AWS_QUEUE_NAME: my-queue
AWS_ENDPOINT: http://aws.docker:4568/
fakesqs:
build: .
command: fake_sqs -p 4568
volumes:
- ./:/app
ports:
- 4568:4568
links:
- db:db
environment:
VIRTUAL_HOST: aws.docker
PGHOST: db
PGUSER: postgres
AWS_REGION: us-west-2
db:
image: postgres
这在某种程度上有效。我可以使用fakesqs
网址向http://aws.docker:4568
发送消息。我试图解决的问题围绕fakesqs
容器的命令。如果您在我的文件中写入fake_sqs
,则默认情况下会将主机名设置为0.0.0.0
。这意味着当我使用aws-sdk gem请求队列网址时,fake_sqs
会回复错误的主机。
client = Aws::SQS::Client.new
client.get_queue_url(queue_name: 'my-queue').queue_url
# => http://0.0.0.0:4568/my-queue
我显然无法使用此网址发送消息。相反,url必须是fakesqs
容器的IP。您可以使用-o
选项设置主机网址(即fake_sqs -o <IP_ADDRESS> -p 4568
)。
如何访问要放入命令的fakesqs
容器IP地址?我是否必须为该容器设置静态IP地址?还是有其他方式我打算这样做?
答案 0 :(得分:4)
尝试使用主机名而不是IP地址。
从您的应用容器中添加指向fake_sqs的链接
app:
build: .
command: bundle exec rails s Puma --port 3000 --binding 0.0.0.0
volumes:
- ./:/app
ports:
- 3000:3000
links:
- db:db
- fake_sqs #add this line!
environment:
VIRTUAL_HOST: app.docker
PGHOST: db
PGUSER: postgres
AWS_REGION: us-west-2
AWS_QUEUE_NAME: my-queue
并尝试在您的应用容器中执行fake_sqs -o fake_sqs -p 4568