【发布时间】:2017-09-08 10:33:39
【问题描述】:
Docker 新手在这里...
我正在尝试从 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 的末尾,但无济于事。
【问题讨论】:
-
您可以使用
docker image inspect <imagename>查找现有图像的ENTRYPOINT和CMD。 -
谢谢@larsks :)
标签: docker dockerfile ibm-datapower