2016-07-18 10 views
0

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?

Antwort

4

Versuchen Sie, den Hostnamen anstelle der IP-Adresse zu verwenden.

Add Link von Ihnen App Container

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 

und versuchen zu fake_sqs fake_sqs -o fake_sqs -p 4568 in Ihrem App Container

+0

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