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

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

ただいまの
回答率

90.51%

  • Docker

    1046questions

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

  • docker-compose

    239questions

docker-composeでDockerfileのコンテナを起動する際に、Dockerfileで定義されている変数の受け渡しをするには

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 260

kk123

score 138

聞きたいこと

docker-composeとDockerfileを駆使して、Dockerfile内で定義されている変数の値をdocker-compose側で管理することは可能でしょうか?

使用しているDockerfileとdocker-composeは下の通りなのですが、Dockerfile単体で起動すると、変数BUILD_VERSIONとSHA256_SUMの値がDockerfile内で代入されているとおりに展開されます(→wgetする際にソースコードを取得してくるときに変数が組み込まれているので、そのときに展開される)

ただ、docker-compose up -d で起動すると、変数が展開されず、wgetなどできない状態です。

使用しているファイル

  • Dockerfile
FROM alpine:3.7 as prep

LABEL maintainer="Tomohisa Kusano <siomiz@gmail.com>" \
contributors="See CONTRIBUTORS file <https://github.com/siomiz/SoftEtherVPN/blob/master/CONTRIBUTORS>"

ENV BUILD_VERSION=4.28-9669-beta \
SHA256_SUM=fbf6e04c4451d0cb1555c3a53c178b5453c7d761119f82fd693538c9f115fecb

RUN wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/archive/v${BUILD_VERSION}.tar.gz \
&& echo "${SHA256_SUM} v${BUILD_VERSION}.tar.gz" | sha256sum -c \
&& mkdir -p /usr/local/src \
&& tar -x -C /usr/local/src/ -f v${BUILD_VERSION}.tar.gz \
&& rm v${BUILD_VERSION}.tar.gz

FROM centos:7 as build

COPY --from=prep /usr/local/src /usr/local/src

RUN yum -y update \
&& yum -y groupinstall "Development Tools" \
&& yum -y install ncurses-devel openssl-devel readline-devel \
&& cd /usr/local/src/SoftEtherVPN_Stable-* \
&& ./configure \
&& make \
&& make install \
&& touch /usr/vpnserver/vpn_server.config \
&& zip -r9 /artifacts.zip /usr/vpn* /usr/bin/vpn*

FROM centos:7

COPY --from=build /artifacts.zip /

COPY copyables /

RUN yum -y update \
&& yum -y install unzip iptables sysvinit-tools \
&& rm -rf /var/log/* /var/cache/yum/* /var/lib/yum/* \
&& chmod +x /entrypoint.sh /gencert.sh \
&& unzip -o /artifacts.zip -d / \
&& rm /artifacts.zip \
&& rm -rf /opt \
&& ln -s /usr/vpnserver /opt \
&& find /usr/bin/vpn* -type f ! -name vpnserver \
-exec sh -c 'ln -s {} /opt/$(basename {})' \;

WORKDIR /usr/vpnserver/

VOLUME ["/usr/vpnserver/server_log/"]

ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 500/udp 4500/udp 1701/tcp 1194/udp 5555/tcp 443/tcp

CMD ["/usr/bin/vpnserver", "execsvc"]
  • docker-compose.yml
    softether:
      build:
        context: ./softether
        args:
          - USERS
          - SPW=${SERVER_MANAGEMENT_PASSWORD}
          - HPW=${HUB_PASSWORD}
      cap_add:
        - NET_ADMIN
      links:
        - php-fpm
      ports:
        - "${L2TP_IPSEC_PORT_1}:500"
        - "${L2TP_IPSEC_PORT_2}:4500"
        - "${L2TP_IPSEC_PORT_3}:1701"
        - "${OPENVPN_PORT}:1194"
        - "${OPENVPN_OVER_HTTPS_PORT}:443"
        - "${SOFTETHER_VPN_PORT}:5555"
        - "${ALTERNATIVE_PORT}:992"
      networks:
        - backend

自分で試してみたこと

  • docker-composeのargsに、Dockerfileで使用している変数を記載してみる。今回の場合だと、docker-compose.ymlに下の情報を追記
    softether:
      build:
        context: ./softether
        args:
          - BUILD_VERSION=4.28-9669-beta
          - SHA256_SUM=fbf6e04c4451d0cb1555c3a53c178b5453c7d761119f82fd693538c9f115fecb
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

https://docs.docker.com/compose/compose-file/#args
Dockerfile内で決まり事をしていないのではないでしょうか。

argsで指定した変数を参照するには、Dockerfile内でARGディレクティブを指定する必要があります。

ENV BUILD_VERSIONや、SHA256_SUMを参照したい場合、

ARG ENV BUILD_VERSION
ARG SHA256_SUM

という記載を参照前にする必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Docker

    1046questions

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

  • docker-compose

    239questions

  • トップ
  • Dockerに関する質問
  • docker-composeでDockerfileのコンテナを起動する際に、Dockerfileで定義されている変数の受け渡しをするには