[英]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.