質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

612閲覧

DooDの手法を使い、Docker-composeで立ち上げたコンテナ同士が通信できる状態にしたい

takuteku

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2023/05/13 05:42

編集2023/05/13 05:44

実現したいこと

1、Dockerfileでコンテテを立ち上げて、そのコンテナ内(仮に親コンテナ)で、docker-composeのインストールおよび、docker-compose upを行う。(DooD)
2、親コンテナ内でのdockerコマンドで立ち上がった2つの子コンテナ(Chromiumのコンテナとrailsのコンテナ)を、同じネットワーク内に置いて、通信できる状況にしたい。

前提

・railsを用いたスクレイピングツールの作成したいと思っています。
・インフラコストを考慮して、常時稼働のサーバーは立ち上げず、AWS batchを用いたいため、docker runで起動するdockerイメージを作成したいと思ってます。
・上記を考慮して、DooDの手法を採用し、Dockerfileでコンテナを立ち上げた上で、その中で、docker-composeを用いています。

発生している問題・エラーメッセージ

docker runを実行した際、webサーバー(rails)が、ログ吐き出さずにすぐこけてしまいます、、
main-web-1 exited with code 0

docker runのログを見るに、
main-chrome-1 | [*******.***][SEVERE]: bind() failed: Cannot assign requested address (99)

ここがキーになると思っており、chrome(chromium)コンテナを4444ポートでポートバインドをしていますが、アクセスできていない状態になっております。
ネットワークの設定に問題があるのでは?と思っているのですが、解決の糸口がわからず、、お助け頂けますと幸いです。

該当のソースコード

ソースコード

Dockerfile

FROM alpine:latest # apkを使用して必要なパッケージをインストールする RUN apk update && \ apk add --no-cache \ bash \ build-base \ curl \ docker \ jq \ nodejs \ openssl \ openssh-client # Docker Composeをインストールする RUN LATEST_VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name) && \ curl -L "https://github.com/docker/compose/releases/download/$LATEST_VERSION/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose && \ chmod +x /usr/local/bin/docker-compose # ユーザーをrootに変更する USER root RUN mkdir /main WORKDIR /main COPY . /main EXPOSE 4444 # Docker Composeを起動する CMD ["sh", "-c", "docker-compose up"]

docker-compose.yml

version: '3' services: web: build: context: . dockerfile: Dockerfile-web platform: linux/amd64 tty: true stdin_open: true volumes: - /var/run/docker.sock:/var/run/docker.sock depends_on: - chrome shm_size: '2gb' networks: - my-network chrome: image: seleniarm/standalone-chromium:latest ports: - "4444:4444" shm_size: '2gb' networks: - my-network networks: my-network:

railsで使用しているcapybaraの設定ファイル

require 'selenium-webdriver' Capybara.register_driver :remote_chrome do |app| options = Selenium::WebDriver::Chrome::Options.new( args: %w[ headless disable-gpu disable-dev-shm-usage window-size=1400,2000 no-sandbox download.default_directory=/tmp/csv ] ) Capybara::Selenium::Driver.new( app, browser: :remote, #chromeコンテナのIPがchrome(docker-composeで命名)、ポート番号が4444。 #wd/hubは、seleniumGridでWebDriverを操作するAPIのエンドポイント。 url: 'http://chrome:4444/wd/hub', options: options ) end # javascript_driverに上で登録したremote_chromeを指定する Capybara.javascript_driver = :remote_chrome Capybara.default_driver = :remote_chrome Capybara.server_host = '0.0.0.0' Capybara.server_port = '9999' #webコンテナのIPを取得して、capybaraのアドレスを設定 Capybara.app_host = "http://#{IPSocket.getaddress(Socket.gethostname)}:#{Capybara.server_port}"

docker起動時
docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock scraping_data:latest

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

すみません、自己解決しました。
どうやら、networksの設定を記述していたことが原因だったようです。(蛇足の設定だったのかもしれません)

networks: - my-network

上記の設定記述を削除することで、無事両コンテナが立ち上がり、通信できるようになりました。

投稿2023/05/17 02:23

takuteku

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問