dockerfile:如何从基本图像中使用CMD或ENTRYPOINT

时间:2017-04-05 16:51:12

标签: docker dockerfile docker-build

我有几个不属于我的基础泊坞窗图像(所以我无法修改它们)。但是,我正在安装其他内容时从中创建新图像。

我无法弄清楚如何告诉dockerfile复制基本图像的CMD(或ENTRYPOINT)。像这样:

FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>

我不认为CMD命令有任何直接语法可以做我想做的事情。我想知道是否有解决方法。

2 个答案:

答案 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;"

希望有帮助