docker 运行 失败 /bin/sh:0 -c 需要参数
docker run fails with /bin/sh:0 -c requires an argument
我正在尝试 运行 一张 docker 图片
Docker 文件
FROM marketplace.gcr.io/google/ubuntu1804:latest
MAINTAINER Vinay Joseph (vinay.joseph@microfocus.com)
LABEL ACI_COMPONENT="License Server"
EXPOSE 20000/tcp
#Install Unzip
RUN apt-get install unzip
#Unzip License Server to /opt/MicroFocus
RUN mkdir /opt/MicroFocus
RUN cd /opt/MicroFocus
#Download the License Server
RUN curl -O https://storage.googleapis.com/software-idol-21/LicenseServer_12.1.0_LINUX_X86_64.zip
RUN chmod 777 LicenseServer_12.1.0_LINUX_X86_64.zip
RUN unzip LicenseServer_12.1.0_LINUX_X86_64.zip
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/xxxx/idol-licenseserver', '.']
images:
- 'gcr.io/xxxx/idol-licenseserver'
我收到的消息是
docker run gcr.io/xxxx/idol-licenseserver
/bin/sh: 0: -c requires an argument
你的 Dockerfile
有几个问题
第一个
RUN apt-get install unzip
一个好的做法是在安装软件包之前执行 update
,否则您可能会陷入缺少软件包列表的情况。
RUN apt-get update && apt-get install -y ...
第二
RUN mkdir /opt/MicroFocus
RUN cd /opt/MicroFocus
这是一个错误,因为 cd
在层之间不起作用(不同的 RUN
命令)。您想要的是通过单个 WORKDIR
命令
实现的
WORKDIR /opt/MicroFocus
第三
您遇到的错误消息表示基本映像配置有类似 ENTRYPOINT ["sh", "-c"]
的内容,因此希望您在启动此映像时提供初始命令行。您必须定义正确的启动命令并将其附加到映像名称后的命令中。
如果您不选择自己的入口点,ENTRYPOINT ["/bin/sh", "-c"]
是每个 Dockerfile 中的默认入口点。如果您 运行 Dockerfile,请将您选择的命令添加到 运行。充其量只是尝试 bash
:
docker run -it gcr.io/xxxx/idol-licenseserver bash
没有添加任何命令,容器不知道在命令行中 运行 什么但仍然启动 bash (在这种情况下为 sh)到 运行 东西,等待对于命令 = -c requires an argument
.
我正在尝试 运行 一张 docker 图片
Docker 文件
FROM marketplace.gcr.io/google/ubuntu1804:latest
MAINTAINER Vinay Joseph (vinay.joseph@microfocus.com)
LABEL ACI_COMPONENT="License Server"
EXPOSE 20000/tcp
#Install Unzip
RUN apt-get install unzip
#Unzip License Server to /opt/MicroFocus
RUN mkdir /opt/MicroFocus
RUN cd /opt/MicroFocus
#Download the License Server
RUN curl -O https://storage.googleapis.com/software-idol-21/LicenseServer_12.1.0_LINUX_X86_64.zip
RUN chmod 777 LicenseServer_12.1.0_LINUX_X86_64.zip
RUN unzip LicenseServer_12.1.0_LINUX_X86_64.zip
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/xxxx/idol-licenseserver', '.']
images:
- 'gcr.io/xxxx/idol-licenseserver'
我收到的消息是
docker run gcr.io/xxxx/idol-licenseserver
/bin/sh: 0: -c requires an argument
你的 Dockerfile
第一个
RUN apt-get install unzip
一个好的做法是在安装软件包之前执行 update
,否则您可能会陷入缺少软件包列表的情况。
RUN apt-get update && apt-get install -y ...
第二
RUN mkdir /opt/MicroFocus
RUN cd /opt/MicroFocus
这是一个错误,因为 cd
在层之间不起作用(不同的 RUN
命令)。您想要的是通过单个 WORKDIR
命令
WORKDIR /opt/MicroFocus
第三
您遇到的错误消息表示基本映像配置有类似 ENTRYPOINT ["sh", "-c"]
的内容,因此希望您在启动此映像时提供初始命令行。您必须定义正确的启动命令并将其附加到映像名称后的命令中。
ENTRYPOINT ["/bin/sh", "-c"]
是每个 Dockerfile 中的默认入口点。如果您 运行 Dockerfile,请将您选择的命令添加到 运行。充其量只是尝试 bash
:
docker run -it gcr.io/xxxx/idol-licenseserver bash
没有添加任何命令,容器不知道在命令行中 运行 什么但仍然启动 bash (在这种情况下为 sh)到 运行 东西,等待对于命令 = -c requires an argument
.