Docker 构建映像 -- 无法 cd 进入目录和 运行 命令
Docker Build Image -- cant cd into directory and run commands
Docker版本:17.09.1-ce
我是 docker 的初学者,我正在尝试在 centos 上构建 docker 图像。以下是我拥有的 docker 文件的片段
FROM centos
RUN yum -y install samba-common && \
yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && \
yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && \
yum -y remove libbsd-devel && \
WORKDIR /usr/src && \
git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit && \
WORKDIR /usr/src/samba && \
WORKDIR /usr/src/winexe-winexe-wafgit/source && \
head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && \
echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && \
echo -e '\t'"lib='dl gnutls'", >> wscript_build && \
echo -e '\t'")" >> wscript_build && \
rm -rf tmp.txt && \
./waf --samba-dir=../../samba configure build
我用普通的 cd
试过了,但没用。 WORKDIR
不起作用。如何在 Dockerfile?
中设置工作目录
我在使用上面的 Dockerfile
时遇到如下错误
/bin/sh: WORKDIR: command not found
The command '/bin/sh -c yum -y install samba-common && yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && yum -y remove libbsd-devel && WORKDIR /usr/src && git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit && WORKDIR /usr/src/samba && git reset --hard a6bda1f2bc85779feb9680bc74821da5ccd401c5 && WORKDIR /usr/src/winexe-winexe-wafgit/source && head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && echo -e '\t'"lib='dl gnutls'", >> wscript_build && echo -e '\t'")" >> wscript_build && rm -rf tmp.txt && ./waf --samba-dir=../../samba configure build' returned a non-zero code: 127
当我尝试使用普通 cd 而不是工作 WORKDIR 时,出现以下错误
/bin/sh: line 0: cd: /usr/src/samba: No such file or directory
但是有了 sudo 我可以进入它。然后我试图在 docker 文件中包含 sudo cd
目录然后它说 no sudo found
更新 1:
这就是我开始构建的方式
sudo docker build -t abwinexeimage -f ./abwinexeimage .
构建成功,但不幸的是,当我列出图像时,我没有看到任何带有 abwinexeimage 标签名称的图像。
我不明白标签名称为 none 的第一个条目是什么。它代表什么?它显示大小为 1.23 GB,我真的需要这张图片还是可以安全删除?
当我开始构建时,第一行显示 Sending build context to Docker daemon 303.9MB
这意味着在名为 centos 且标签名称为 latest 的图像列表存储库中是我构建的正确图像?我假设大小为 202 MB?
然后我发出dockerps,但是没有容器运行ning,然后发出dockerps -a 来查看停止的容器
然后我尝试运行图像作为容器..
现在尝试发出 docker ps 来检查容器是否 运行ning
现在我可以告诉你为什么我如此担心存在多个容器。实际上我想在 docker 容器中手动将 CD 放入 cd /usr/src/samba 以验证通过 docker 文件所做的更改是否已正确更新。现在因为我有多个容器,真的不确定我需要查看哪个容器。在那次特技表演中,我尝试启动所有容器,然后手动发出
docker exec -it CONTAINER_NAME [bash | sh]
验证我是否能够在那里找到该文件系统。这就是为什么我问我是否可以有一个容器以便我可以在那里轻松找到文件系统的原因,我的理解是因为多个 运行 语句创建了不同的层,所以我很难找到我在哪个容器中文件系统驻留,以便我可以 CD 进入它.. 抱歉解释太多......我试图更好地理解概念。请您发表意见..
您需要使用 WORKDIR
作为 Dockerfile 指令,而不是将其与 run
指令一起使用。
运行 有两种形式:
RUN (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows) RUN
["executable", "param1", "param2"] (exec form)
WORKDIR
WORKDIR /path/to/workdir The WORKDIR instruction sets the working
directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that
follow it in the Dockerfile
FROM centos
RUN yum -y install samba-common && \
yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && \
yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && \
yum -y remove libbsd-devel
WORKDIR /usr/src
#use git clone with RUN not with WORKDIR
RUN git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit
#So start it with new line
WORKDIR /usr/src/samba
WORKDIR /usr/src/winexe-winexe-wafgit/source
#start RUN with new line
RUN head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && \
echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && \
echo -e '\t'"lib='dl gnutls'", >> wscript_build && \
echo -e '\t'")" >> wscript_build && \
rm -rf tmp.txt && \
./waf --samba-dir=../../samba configure build
Docker版本:17.09.1-ce 我是 docker 的初学者,我正在尝试在 centos 上构建 docker 图像。以下是我拥有的 docker 文件的片段
FROM centos
RUN yum -y install samba-common && \
yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && \
yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && \
yum -y remove libbsd-devel && \
WORKDIR /usr/src && \
git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit && \
WORKDIR /usr/src/samba && \
WORKDIR /usr/src/winexe-winexe-wafgit/source && \
head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && \
echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && \
echo -e '\t'"lib='dl gnutls'", >> wscript_build && \
echo -e '\t'")" >> wscript_build && \
rm -rf tmp.txt && \
./waf --samba-dir=../../samba configure build
我用普通的 cd
试过了,但没用。 WORKDIR
不起作用。如何在 Dockerfile?
我在使用上面的 Dockerfile
/bin/sh: WORKDIR: command not found
The command '/bin/sh -c yum -y install samba-common && yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && yum -y remove libbsd-devel && WORKDIR /usr/src && git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit && WORKDIR /usr/src/samba && git reset --hard a6bda1f2bc85779feb9680bc74821da5ccd401c5 && WORKDIR /usr/src/winexe-winexe-wafgit/source && head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && echo -e '\t'"lib='dl gnutls'", >> wscript_build && echo -e '\t'")" >> wscript_build && rm -rf tmp.txt && ./waf --samba-dir=../../samba configure build' returned a non-zero code: 127
当我尝试使用普通 cd 而不是工作 WORKDIR 时,出现以下错误
/bin/sh: line 0: cd: /usr/src/samba: No such file or directory
但是有了 sudo 我可以进入它。然后我试图在 docker 文件中包含 sudo cd
目录然后它说 no sudo found
更新 1:
这就是我开始构建的方式
sudo docker build -t abwinexeimage -f ./abwinexeimage .
构建成功,但不幸的是,当我列出图像时,我没有看到任何带有 abwinexeimage 标签名称的图像。
我不明白标签名称为 none 的第一个条目是什么。它代表什么?它显示大小为 1.23 GB,我真的需要这张图片还是可以安全删除?
当我开始构建时,第一行显示 Sending build context to Docker daemon 303.9MB
这意味着在名为 centos 且标签名称为 latest 的图像列表存储库中是我构建的正确图像?我假设大小为 202 MB?
然后我发出dockerps,但是没有容器运行ning,然后发出dockerps -a 来查看停止的容器
然后我尝试运行图像作为容器..
现在尝试发出 docker ps 来检查容器是否 运行ning
现在我可以告诉你为什么我如此担心存在多个容器。实际上我想在 docker 容器中手动将 CD 放入 cd /usr/src/samba 以验证通过 docker 文件所做的更改是否已正确更新。现在因为我有多个容器,真的不确定我需要查看哪个容器。在那次特技表演中,我尝试启动所有容器,然后手动发出
docker exec -it CONTAINER_NAME [bash | sh]
验证我是否能够在那里找到该文件系统。这就是为什么我问我是否可以有一个容器以便我可以在那里轻松找到文件系统的原因,我的理解是因为多个 运行 语句创建了不同的层,所以我很难找到我在哪个容器中文件系统驻留,以便我可以 CD 进入它.. 抱歉解释太多......我试图更好地理解概念。请您发表意见..
您需要使用 WORKDIR
作为 Dockerfile 指令,而不是将其与 run
指令一起使用。
运行 有两种形式:
RUN (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows) RUN
["executable", "param1", "param2"] (exec form)
WORKDIR
WORKDIR /path/to/workdir The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile
FROM centos
RUN yum -y install samba-common && \
yum -y install gcc perl mingw-binutils-generic mingw-filesystem-base mingw32-binutils mingw32-cpp mingw32-crt mingw32-filesystem mingw32-gcc mingw32-headers mingw64-binutils mingw64-cpp mingw64-crt mingw64-filesystem mingw64-gcc mingw64-headers libcom_err-devel popt-devel zlib-devel zlib-static glibc-devel glibc-static python-devel && \
yum -y install git gnutls-devel libacl1-dev libacl-devel libldap2-dev openldap-devel && \
yum -y remove libbsd-devel
WORKDIR /usr/src
#use git clone with RUN not with WORKDIR
RUN git clone git://xxxxxxxx/p/winexe/winexe-waf winexe-winexe-wafgit
#So start it with new line
WORKDIR /usr/src/samba
WORKDIR /usr/src/winexe-winexe-wafgit/source
#start RUN with new line
RUN head -n -3 wscript_build > tmp.txt && cp -f tmp.txt wscript_build && \
echo -e '\t'"stlib='smb_static bsd z resolv rt'", >> wscript_build && \
echo -e '\t'"lib='dl gnutls'", >> wscript_build && \
echo -e '\t'")" >> wscript_build && \
rm -rf tmp.txt && \
./waf --samba-dir=../../samba configure build