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进入。然后,我尝试将sudo cd
目录包括在docker文件中,然后显示no sudo found
更新1:
这就是我开始构建的方式
sudo docker build -t abwinexeimage -f ./abwinexeimage .
构建成功,但不幸的是,当我列出图像时,我看不到任何带有namwin标记为abwinexeimage的图像。
我不明白什么是第一个标签名称为no的条目。它代表什么?它显示的大小为1.23 GB,我真的需要这张图片还是可以安全删除?
当我开始构建时,第一行显示Sending build context to Docker daemon 303.9MB
意味着在该图像列表存储库中名为centos且标签名称为last的存储库是我构建的正确图像吗?我假设大小为202 MB?
然后我发布了docker ps,但是没有运行容器,然后发布了docker ps -a以查看已停止的容器
然后我尝试将图像作为容器运行。
现在试图发布docker ps来检查容器是否正在运行
现在我可以告诉您为什么我如此担心存在的多个容器。实际上,我想手动将CD放入docker容器中的cd / usr / src / samba中,以验证通过docker文件所做的更改是否正确更新。现在,由于我有多个容器,真的不确定我需要研究哪个容器。在这种特技中,我尝试启动所有容器,然后手动发布
docker exec -it CONTAINER_NAME [bash | sh]
验证我是否能够在此处找到该文件系统。这就是为什么我问我是否可以拥有一个容器以便可以轻松地在其中找到文件系统的原因,我的理解是由于多个RUN语句创建了不同的层,所以我很难找到我的文件系统驻留在哪个容器中,这样我就可以CD了。.抱歉给我很大的解释...我试图更好地理解概念。请发表您的评论。
答案 0 :(得分:0)
您需要将WORKDIR
用作Dockerfile指令,而不是与run
指令一起使用。
运行有2种形式:
RUN(shell形式,命令在shell中运行,在Linux上默认为/ bin / sh -c,在Windows上默认为cmd / S / C)RUN
[“可执行文件”,“ param1”,“ param2”](执行表单)
WORKDIR
WORKDIR / path / to / workdir WORKDIR指令设置工作 任何RUN,CMD,ENTRYPOINT,COPY和ADD指令的目录 在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