我有几个不属于我的基础泊坞窗图像(所以我无法修改它们)。但是,我正在安装其他内容时从中创建新图像。
我无法弄清楚如何告诉dockerfile复制基本图像的CMD(或ENTRYPOINT)。像这样:
FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>
我不认为CMD命令有任何直接语法可以做我想做的事情。我想知道是否有解决方法。
答案 0 :(得分:17)
如果你在新的Dockerfile中将它留空,它将继承基础图像中的那个。
例如:
<强>碱强>
private string _phone;
public string Phone
{
get
{
return _phone;
}
set
{
int indexOfSlash = value.IndexOf("/");
if (value.Length > 13 || indexOfSlash > 4 || indexOfSlash < 2 || value[0] != '+')
throw new Exception("Wrong format");
for (int i = 1; i < value.Length; i++)
{
if ((i < indexOfSlash || i > indexOfSlash) && !value[i].IsDigit())
throw new Exception("Wrong format");
}
_phone = value;
}
}
<强>层1 强>
FROM ubuntu
CMD ["echo", "AAA"]
如果您构建上面的图片并运行FROM base
,您将获得以下内容:
layer1
答案 1 :(得分:0)
@Vor是正确的。但是以防万一
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /
和
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"
nginx:stable-alpine
中不会执行来自exec "$@"
的默认CMD。
您必须自己在Dockerfile中编写默认的nginx-alpine的CMD
(!)
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
COPY ./docker-entrypoint.sh /
或更改您的docker-entrypoint.sh
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec nginx -g "daemon off;"
希望有帮助