Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となります: 2026-03-17. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

GitHub ActionsのためのDockerfileサポート

Docker コンテナー アクション用の Dockerfile を作成する際には、いくつかの Docker の命令が GitHub Actions やアクションのメタデータ ファイルとどのように関わるのかを知っておく必要があります。

メモ

GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。

User

DockerアクションはデフォルトのDockerユーザ(root)で実行されなければなりません。 USER では Dockerfile 命令を使用しないでください。そうしないと、GITHUB_WORKSPACE ディレクトリにアクセスできなくなります。 詳細については、「変数リファレンス」と、Docker ドキュメントの USER リファレンスを参照してください。

FROM

          `Dockerfile` の最初の命令は、`FROM` とする必要があります。これにより、Docker ベース イメージが選択されます。 詳細については、Docker ドキュメントの [FROM リファレンス](https://docs.docker.com/engine/reference/builder/#from)を参照してください。

          `FROM` 引数の設定には、いくつかのベストプラクティスがあります。
  • 公式のDockerイメージを使うことをおすすめします。 たとえば、python または ruby です。
  • バージョンタグが存在する場合は使ってください。メジャーバージョンも含めることが望ましいです。 たとえば、node:10 の代わりに node:latest を使用します。
  •         [Debian](https://www.debian.org/) オペレーティング システムに基づいて Docker イメージを使用することをお勧めします。
    

WORKDIR

GitHub は、作業ディレクトリのパスを GITHUB_WORKSPACE 環境変数に設定します。 WORKDIR では、Dockerfile 命令を使用しないことをお勧めします。 アクションが実行される前に、GitHub は GITHUB_WORKSPACE ディレクトリを、Docker イメージ内でその場所にあったものの上にマウントし、GITHUB_WORKSPACE を作業ディレクトリとして設定します。 詳細については、「変数リファレンス」と、Docker ドキュメントの WORKDIR リファレンスを参照してください。

ENTRYPOINT

アクションのメタデータ ファイルで entrypoint を定義すると、それによって、ENTRYPOINT 内に定義されている Dockerfile がオーバーライドされます。 詳しくは、「メタデータ構文リファレンス」をご覧ください。

Docker の ENTRYPOINT 命令には、shell 形式と exec 形式があります。 Docker ENTRYPOINT ドキュメントでは、__ 命令の ENTRYPOINT 形式を使用することを推奨しています。 exec 形式と shell 形式の詳細については、Docker ドキュメントの ENTRYPOINT リファレンスを参照してください。

Dockerfile でエントリポイントを指定する場合は、WORKDIR を使用しないでください。 代わりに、絶対パスを使用する必要があります。 詳細については、「WORKDIR」を参照してください。

          _
          _ 命令の `ENTRYPOINT` 形式を使用するようにコンテナーを構成した場合、アクションのメタデータ ファイルで構成された `args` はコマンド シェルで実行されません。 アクションの `args` に環境変数が含まれている場合、その変数は置換されません。 たとえば、次の _exec_ 形式を使用すると、`$GITHUB_SHA` に格納されている値は出力されませんが、代わりに `"$GITHUB_SHA"` が出力されます。
ENTRYPOINT ["echo $GITHUB_SHA"]

変数の置換が必要な場合は、shell 形式を使用するか、直接シェルを実行してください。 たとえば、以下の exec 形式を使用すれば、シェルを実行して環境変数 GITHUB_SHA に保存された値を出力できます。

ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"]

アクションのメタデータ ファイルで定義されている args を、__ で ENTRYPOINT 形式を使用している Docker コンテナーに指定するには、entrypoint.sh 命令から呼び出す ENTRYPOINT というシェル スクリプトを作成することをお勧めします。

          _Dockerfile_ の例
# Container image that runs your code
FROM debian:9.5-slim

# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh

# Executes `entrypoint.sh` when the Docker container starts up
ENTRYPOINT ["/entrypoint.sh"]

          _entrypoint.sh_ ファイルの例

上の Dockerfile を使って、GitHub は、アクションのメタデータ ファイルで構成されている argsentrypoint.sh への引数として送信します。 #!/bin/sh ファイルの先頭に entrypoint.sh を追加して、システムの POSIX準拠のシェルを明示的に使用します。

#!/bin/sh

# `$#` expands to the number of arguments and `$@` expands to the supplied `args`
printf '%d args:' "$#"
printf " '%s'" "$@"
printf '\n'

コードは実行可能になっていなければなりません。 ワークフローで使用する前に、entrypoint.sh ファイルに execute アクセス許可があることを確認します。 この権限は、ターミナルから以下のコマンドで変更できます。

chmod +x entrypoint.sh
          `ENTRYPOINT` シェル スクリプトが実行可能ではなかった場合、以下のようなエラーが返されます。
Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown

CMD

アクションのメタデータ ファイルで args を定義すると、args によって、CMD で指定された Dockerfile 命令がオーバーライドされます。 詳しくは、「メタデータ構文リファレンス」をご覧ください。

          `CMD` で `Dockerfile` を使用する場合は、次のガイドラインに従ってください。
  1. アクションの README 中で必須の引数をドキュメント化し、CMD 命令から除外します。
  2. args を指定せずにアクションを利用できるよう、既定値を使用します。
  3. アクションが --help フラグやそれに類するものを備えているなら、アクションを自己ドキュメント化するためにそれを利用します。

サポートされているLinuxの機能

GitHub Actionsは、DockerがサポートするデフォルトのLinuxの機能をサポートします。 機能の追加や削除はできません。 Docker でサポートされる既定の Linux 機能の詳細については、Docker ドキュメントの「Linux kernel capabilities」(Linux カーネル機能) を参照してください。 Linux 機能の詳細については、Linux の man ページの Linux 機能の概要に関するページを参照してください。