yoshikazu0110
@yoshikazu0110 (h y)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

docker compose run と up の違い

docker-compose run frontだとwsl(ubunt)でコンテナで立ち上げたvueプロジェクトにアクセスできない

以下のようなdocker-compose.ymlファイルを用意してい
以下のコマンドを実行してみました。
docker-compose up
docker-compose run front

docker-compose.yml
version: '3.9'
services:
  front:
    build:
      context: .
      dockerfile: dockerfile
    working_dir: /usr/src/app/front
    tty: true
    environment:
      - NODE_ENV=development
    command: sh -c "npm run dev"
    ports:
    - "5173:5173"
    volumes:
    - ./app/front:/usr/src/app/front

docker-compose upの時はlocalhost:5173とブラウザに打ち込むと、なじみのこんな画面が表示されるのですが、
image.png

docker-compose run frontとすると、サイトにアクセスできませんと出てしまいます。
image.png

どちらもfrontに沿った内容のコンテナを動かしていると思うのですがなぜこのような違いがあるのでしょうか?

docker-compose run frontだとリッスンしているポートも見つからない。
image.png

0

2Answer

docker-compose run frontとすると、サイトにアクセスできませんと出てしまいます。

$ docker-compose up
$ docker ps # -d でdaemon化しないなら別ターミナルから
$ docker-compose run front
$ docker ps # 別ターミナルから

としてみて違いが見えるはずです。
runだとポートはdocker-compose.yml通りに開放されていないはずです。

1Like

可能ならcliをインストールすることを推奨します。docker compose up -d front のように実行できます。

これにより、build のよるimageのレイアが安定します。

さて、front:以外のサービスの記述がないですか?

upは既存コンテナがあれば、そのコンテナを起動します。docker-compose.ymlの全サービスを実行します。

一方、runはbuildされたイメージのとあるレイアよりcreateしてそのコンテナ一つを起動します。dockerfile+docker-compose.ymlを実行します。dockerfileの記述が不明(FROM,RUN,ADD,COPY以外記述しないこと)

とあるレイアと書きましたが、docker-composeだと何回もbuildを繰り返すすとレイアが安定しないような事象に出くわします。そのためcliの利用を推奨します。

その場合はローカルのイメージを一旦削除してからrun,upすれば同じ結果になるとおもいます。

0Like

Comments

  1. @github0013@github さんの指摘が正解ですね

    docker compose runも同じでした

    因みに、私は次の定義しており、ポートマッピングはしていません。ホスト側で空いているportをアプリ側で指定します。残念ながらLinux環境限定です。

    network_mode: host

Your answer might help someone💌