Ich versuche, die fake_sqs gem in einem Docker-Container in Entwicklung zu testen, um meine SQS-Integration zu testen, und eine andere App senden Nachrichten an sie.So erhalten Sie die IP-Adresse des Containers in docker-compse
Meine Docker-Compose-Datei sieht wie folgt aus:
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
Diese bis zu einem gewissen Grad funktioniert. Ich kann Nachrichten an die fakesqs
unter Verwendung der URL senden. Das Problem, das ich versuche zu lösen, dreht sich um den Befehl für den Container fakesqs
. Wenn Sie fake_sqs
so ausführen, wie es in meiner Datei geschrieben ist, wird der Hostname standardmäßig auf 0.0.0.0
festgelegt. Dies bedeutet, dass, wenn ich die aws-sdk gem verwenden, um Warteschlange URLs anfragen, fake_sqs
Antworten mit dem falschen Host.
client = Aws::SQS::Client.new
client.get_queue_url(queue_name: 'my-queue').queue_url
# => http://0.0.0.0:4568/my-queue
Ich kann diese URL offenbar nicht verwenden, um Nachrichten zu senden. Stattdessen muss die URL die IP des fakesqs
Containers sein. Sie können die Host-URL mit der Option -o
(d. H. fake_sqs -o <IP_ADDRESS> -p 4568
) festlegen.
Wie kann ich auf die Containeradresse fakesqs
zugreifen, die in den Befehl eingefügt werden soll? Muss ich eine statische IP-Adresse für diesen Container festlegen? Oder soll ich es anders machen?
Dies war ein Teil der Antwort auszuführen. Der andere Teil war, dass ich das fake_sqs gem forken musste, damit ich einen Host-Namen bereitstellen konnte, ohne die bindende IP zu ändern (https://github.com/CloverAU/fake_sqs). – link664