簡體   English   中英

了解Dockerfile和docker run之間ENTRYPOINT / CMD順序的差異

[英]Understanding the difference in sequence of ENTRYPOINT/CMD between Dockerfile and docker run

Docker noob在這里...

我正在嘗試從Dockerfile構建和運行IBM DataPower容器,但是它似乎與僅運行docker run並在終端中傳遞相同參數時的工作方式不同。

這有效( docker run

docker run -it \
  -v $PWD/config:/drouter/config \
  -e DATAPOWER_ACCEPT_LICENSE=true \
  -e DATAPOWER_INTERACTIVE=true \
  -e DATAPOWER_WORKER_THREADS=4 \
  -p 9090:9090 \
  --name mydatapower \
  ibmcom/datapower

...關鍵部分是它安裝了./config文件夾,並且容器中運行的datapower接受了自定義配置。

這不是( Dockerfile

Dockerfile:

FROM ibmcom/datapower

ENV DATAPOWER_ACCEPT_LICENSE=true
ENV DATAPOWER_INTERACTIVE=true
ENV DATAPOWER_WORKER_THREADS=4

EXPOSE 9090

COPY config/auto-startup.cfg /drouter/config/auto-startup.cfg

建立:

docker build -t local/datapower .

跑:

docker run -it \
  -p 9090:9090 \
  --name mydatapower local/datapower

問題在於,DataPower不會拾取auto-startup.cfg文件,因此不會使用其他配置選項。 我知道源文件路徑是正確的,因為如果我拼錯了文件名,docker會拋出錯誤。

我有一個理論,在配置文件可用之前,它可能正在運行繼承的ENTRYPOINT或CMD。 我不知道如何測試或證明這一點。 我不知道ENTRYPOINT或CMD是什么,因為繼承的圖像不是開源的,我不知道如何找到它。

看來有可能嗎?

更新:

auto-startup.cfg的內容為:

top; co

ssh

web-mgmt
  admin enabled
  port 9090
exit

它只是啟用了DataPower WebGUI。

在命令行中使用以下命令運行時的輸出:

docker run -it -v $PWD/config:/drouter/config -v $PWD/local:/drouter/local -e DATAPOWER_ACCEPT_LICENSE=true -e DATAPOWER_INTERACTIVE=true -e DATAPOWER_WORKER_THREADS=4 -p 9091:9090 --name myconfigureddatapower ibmcom/datapower`

...包含以下內容:

20170908T121729.015Z [0x8100006e][system][notice] : Executing startup configuration.
20170908T121729.970Z [0x00350014][mgmt][notice] web-mgmt(WebGUI-Settings): tid(303): Operational state up

...但是使用Dockerfile卻沒有。 這就是為什么我認為配置文件可能復制到位太晚。

我嘗試將CMD ["/bin/drouter"]到我的Dockerfile末尾無濟於事。

我已經測試了您的Dockerfile,它似乎正在工作。 我的auto-startup.cfg文件已復制到正確的位置,當我啟動容器時,它正在讀取文件。

我得到以下輸出:

[root@ip-172-30-2-164 tmp]# docker run  -ti -p 9090:9090  test
20170908T123728.818Z [0x8040006b][system][notice] logging target(default-log): Logging started.
20170908T123729.067Z [0x804000fe][system][notice] : Container instance UUID: 36bcca0e-6139-4694-91b0-2b7b66c3a498, Cores: 4, vCPUs: 4, CPU model: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz, Memory: 16049.1MB, Platform: docker, OS: dpos, Edition: developers-limited, Up time: 0 minutes
20170908T123729.071Z [0x8040001c][system][notice] : DataPower IDG is on-line.
20170908T123729.071Z [0x8100006f][system][notice] : Executing default startup configuration.
20170908T123729.416Z [0x8100006d][system][notice] : Executing system configuration.
20170908T123729.417Z [0x8100006b][mgmt][notice] domain(default): tid(8143): Domain operational state is up.
708f98be1390
Unauthorized access prohibited.
20170908T123731.239Z [0x806000dd][system][notice] cert-monitor(Certificate Monitor): tid(399): Enabling Certificate Monitor to scan once every 1 days for soon to expire certificates
20170908T123731.552Z [0x8100006e][system][notice] : Executing startup configuration.
20170908T123732.436Z [0x8100003b][mgmt][notice] domain(default): Domain configured successfully.
20170908T123732.449Z [0x00350014][mgmt][notice] web-mgmt(WebGUI-Settings): tid(303): Operational state up
login: 

要檢查文件是否已復制到容器中,可以運行docker run -ti local/datapower sh進入容器,然后檢查/drouter/config/

您的基本映像命令是: CMD ["/bin/drouter"]您可以在運行docker history ibmcom/datapower檢查它。

更新:

容器中的drouter用戶必須能夠讀取auto-startup.cfg文件。 您有2個選擇:

  • 使用適當的權限( chmod 644 config/autostart.cfg )設置本地auto-startup.cfg
  • 或在Dockerfile中添加以下行,以便drouter可以讀取文件:

     USER root RUN chown drouter /drouter/config/auto-startup.cfg USER drouter 

暫無
暫無

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

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