簡體   English   中英

Dockerfile:是否可以引用覆蓋的入口點和cmd?

[英]Dockerfile: is it possible to reference overridden entrypoint and cmd?

我正在嘗試使用mysql 5.6從此處構建映像作為基本映像。 我需要在數據庫啟動之前進行一些初始化,所以我需要覆蓋入口點:

# Stuff in my Dockerfile
...
COPY my-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["my-entrypoint.sh"]

我的入口點也很簡單:

#!/bin/bash
echo "Running my-entrypoint.sh"
# My initialization stuff here
...
# Call mysql entrypoint
/usr/local/bin/docker-entrypoint.sh mysqld

這似乎可行,但是我不想在腳本(或Dockerfile)中對mysql入口點進行硬編碼。 有沒有辦法在我的Dockerfile中引用覆蓋的入口點,以便它對我的入口點腳本可用? 大概是這樣嗎?

COPY my-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["my-entrypoint.sh", BASE_ENTRYPOINT, BASE_CMD]

它必須以某種方式出現在某個地方,否則您將無法獲得此類信息。

  • 選項1:對Dockerfile先前入口點使用ENV ,然后在您自己的entrypoint.sh中引用它:

    Dockerfile:

     FROM alpine:3.3 ENV MYSQL_ENTRYPOINT "/usr/bin/mysql mysqld" ADD entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] 

    Entrypoint.sh:

     #!/bin/sh echo $MYSQL_ENTRYPOINT 
  • 選項2:只需將先前的entrypoint命令作為參數傳遞給您的入口點:

    Dockerfile:

     FROM alpine:3.3 ADD entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] CMD ["/usr/bin/mysql mysqld"] 

    Entrypoint.sh:

     #!/bin/sh echo $1 

我個人更喜歡選擇#1。

2種方式:

您只需在指定圖片后將其傳遞,之后的所有內容就會變成CMD並附加到您的ENTRYPOINT 所以...

# Stuff in my Dockerfile
...
COPY my-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["my-entrypoint.sh"]

然后docker run ... image <your-entrypoint-etc>然后讓您的自定義入口點拾取第一個arg並根據需要使用它。

第二種方法,只需在運行時將其作為環境變量傳遞即可。

docker run ... -e MYSQL_ENTRYPOINT=<something> ...

在入口點腳本中,請參考env變量... $MYSQL_ENTRYPOINT ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM