我正在尝试在开发中的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请求队列URL时,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发送消息。相反,该URL必须是
fakesqs
容器的IP。您可以使用-o
选项(即fake_sqs -o <IP_ADDRESS> -p 4568
)设置主机网址。如何访问
fakesqs
容器IP地址以放入命令中?我必须为该容器设置一个静态IP地址吗?还是有另一种我打算做的方式?
最佳答案
尝试使用主机名而不是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
关于ruby - 如何在docker-compose中获取容器的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38430826/