Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ローカルでDcokerコンテナを立ち上げたときにredocly側がエラーで動かなかったのを修正する #166

Closed
wants to merge 2 commits into from

Conversation

Lucky3028
Copy link
Member

@Lucky3028 Lucky3028 commented Sep 8, 2024

  • コンテナ起動時にtspのコンパイルとredoclyのドキュメント生成がこけていた
  • tspのコンパイルはcompile-and-up-compose.shでしていて、Dockerコンテナはコンパイルして生成されたopenapi,yamlをボリュームでマウントしているので、Dockerコンテナの中でtspのコンパイルはしなくてよい
  • それに伴って、redocly CLIがマウントされたyamlをみにいくように修正

@Lucky3028 Lucky3028 requested a review from rito528 as a code owner September 8, 2024 02:03
Copy link
Member

@rito528 rito528 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コンテナ起動時にtspのコンパイルとredoclyのドキュメント生成がこけていた

ここでこけたことが今までなかったんですが、どういう挙動をしていたのかもう少し詳細が欲しいです

tspのコンパイルはcompile-and-up-compose.shでしていて、Dockerコンテナはコンパイルして生成されたopenapi,yamlをボリュームでマウントしているので、Dockerコンテナの中でtspのコンパイルはしなくてよい

これは確かにそうですが、Docker コンテナとシェルスクリプトのどちらか1つでコンパイルすることを前提にするならば、シェルスクリプトでコンパイルすることを前提にするよりも、Docker コンテナ内でコンパイルすることを前提にしたほうが良いかなと思いました。

@Lucky3028
Copy link
Member Author

Lucky3028 commented Sep 8, 2024

あとでかきます

@Lucky3028
Copy link
Member Author

Lucky3028 commented Sep 8, 2024

@rito528

volumes:
- ./tsp-output/@typespec/openapi3:/schema

redocly のコンテナに対してマウントしているボリュームは、./tsp-output/@typespec/openapi3/schemaにマウントするものだけなので、/tmp/files/srcがなく、tspのコンパイルは失敗します。
よって、そのコンパイルの結果出力先であるtsp-output/@typespec/openapi3/openapi.yamlは存在しないので、redoclyのドキュメント生成も失敗します。

以下ログです。

❯ docker container ls
CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS         PORTS
                     NAMES
c3b79515b57d   seichi-portal-api-schema-redocly   "./entrypoint.sh"        5 seconds ago   Up 4 seconds   127.0.0.1:8082->8080/tcp           redocly
90c249178056   swaggerapi/swagger-ui              "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   80/tcp, 127.0.0.1:8081->8080/tcp   swagger-ui
❯ docker logs c3b79515b57d
TypeSpec compiler v0.59.1

error file-not-found: File /tmp/files/src not found.

tsp-output/@typespec/openapi3/openapi.yaml does not exist or is invalid.

Please provide a valid path.

Starting up http-server, serving ./docs

http-server version: 14.1.1

http-server settings:
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none

Available on:
  http://127.0.0.1:8080
  http://172.18.0.2:8080
Hit CTRL-C to stop the server
❯

@Lucky3028
Copy link
Member Author

これは確かにそうですが、Docker コンテナとシェルスクリプトのどちらか1つでコンパイルすることを前提にするならば、シェルスクリプトでコンパイルすることを前提にするよりも、Docker コンテナ内でコンパイルすることを前提にしたほうが良いかなと思いました。

はそうですね

@Lucky3028
Copy link
Member Author

↑の件の共有認識が取れたらそちらに書き換えます

@rito528
Copy link
Member

rito528 commented Sep 8, 2024

@rito528

volumes:
- ./tsp-output/@typespec/openapi3:/schema

redocly のコンテナに対してマウントしているボリュームは、./tsp-output/@typespec/openapi3/schemaにマウントするものだけなので、/tmp/files/srcがなく、tspのコンパイルは失敗します。 よって、そのコンパイルの結果出力先であるtsp-output/@typespec/openapi3/openapi.yamlは存在しないので、redoclyのドキュメント生成も失敗します。

以下ログです。

❯ docker container ls
CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS         PORTS
                     NAMES
c3b79515b57d   seichi-portal-api-schema-redocly   "./entrypoint.sh"        5 seconds ago   Up 4 seconds   127.0.0.1:8082->8080/tcp           redocly
90c249178056   swaggerapi/swagger-ui              "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   80/tcp, 127.0.0.1:8081->8080/tcp   swagger-ui
❯ docker logs c3b79515b57d
TypeSpec compiler v0.59.1

error file-not-found: File /tmp/files/src not found.

tsp-output/@typespec/openapi3/openapi.yaml does not exist or is invalid.

Please provide a valid path.

Starting up http-server, serving ./docs

http-server version: 14.1.1

http-server settings:
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none

Available on:
  http://127.0.0.1:8080
  http://172.18.0.2:8080
Hit CTRL-C to stop the server
❯

これを試したんですが、スクリプトから実行した TypeSpec のコンパイルに失敗した結果、openapi.yaml が生成されなかったために redocly の起動に失敗しているようですね....(ローカルで作成した openapi.yaml をコピーして redocly が読んでいるので)
なのでコンテナ内ではなく、開発環境で tsp compile ./src を実行してコンパイルをしてからだと起動できるようになるはずです。
しかし、せっかく用意してあるスクリプトを実行するだけではコンパイルに失敗してコンテナが起動できないのは問題なので、何とかしたほうがよさそう....

@Lucky3028
Copy link
Member Author

ローカルで作成した openapi.yaml をコピーして redocly が読んでいるので

ってどこでやってます?

@rito528
Copy link
Member

rito528 commented Sep 8, 2024

volumes:
- ./tsp-output/@typespec/openapi3:/schema
environment:
SPEC_URL: /schema/openapi.yaml

ここです

@Lucky3028
Copy link
Member Author

ありがとうございます。
/schema にマウントしたものって読まれてないのでは?

redocly build-docs ./tsp-output/@typespec/openapi3/openapi.yaml -o ./docs/index.html -t ./template.hbs

@rito528
Copy link
Member

rito528 commented Sep 8, 2024

私の環境で起動したときのログでは、ローカルでコンパイルしたあとに docker compose up -d をすると読み込まれているようですね...

2024-09-08 18:44:35 
2024-09-08 18:44:35   🔎  Preview server running at http://0.0.0.0:8080
2024-09-08 18:44:35 
2024-09-08 18:44:35   👀  Watching /schema/openapi.yaml and all related resources for changes
2024-09-08 18:44:35 
2024-09-08 18:44:35 
2024-09-08 18:44:35 Bundling...
2024-09-08 18:44:35 
2024-09-08 18:44:35 Created a bundle for /schema/openapi.yaml successfully
2024-09-08 18:44:35 Using Redoc community edition.
2024-09-08 18:44:35 Login with redocly login or use an enterprise license key to preview with the premium docs.
2024-09-08 18:44:35 

@Lucky3028
Copy link
Member Author

謎挙動かも。
一回吹っ飛ばしてもう一度mainのもの引っ張ってきてやってみてくれませんか?
@rito528

@rito528
Copy link
Member

rito528 commented Sep 14, 2024

@Lucky3028

謎挙動かも。 一回吹っ飛ばしてもう一度mainのもの引っ張ってきてやってみてくれませんか? @rito528

main を新しくリモートから持ってきて試しても、以下のようにログがでて普通に起動できますね。

2024-09-14 15:21:54 
2024-09-14 15:21:54   🔎  Preview server running at http://0.0.0.0:8080
2024-09-14 15:21:54 
2024-09-14 15:21:54   👀  Watching /schema/openapi.yaml and all related resources for changes
2024-09-14 15:21:54 
2024-09-14 15:21:54 Using Redoc community edition.
2024-09-14 15:21:54 Login with redocly login or use an enterprise license key to preview with the premium docs.
2024-09-14 15:21:54 
2024-09-14 15:21:54 
2024-09-14 15:21:54 Bundling...
2024-09-14 15:21:54 
2024-09-14 15:21:54 Created a bundle for /schema/openapi.yaml successfully

@Lucky3028
Copy link
Member Author

ありがとうございます。どうしてそこで差異が出るんだ...???

@Lucky3028
Copy link
Member Author

めんどくさいので

これは確かにそうですが、Docker コンテナとシェルスクリプトのどちらか1つでコンパイルすることを前提にするならば、シェルスクリプトでコンパイルすることを前提にするよりも、Docker コンテナ内でコンパイルすることを前提にしたほうが良いかなと思いました。

を別PRでやっちゃいます

@Lucky3028 Lucky3028 closed this Sep 14, 2024
@Lucky3028 Lucky3028 deleted the Lucky3028-patch-1 branch September 14, 2024 16:28
@rito528
Copy link
Member

rito528 commented Sep 14, 2024

ただ、なんで Lucky さんの環境でこのような挙動をするのかは気になりますね....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants