我有这个Dockerfile
:
FROM chekote/gulp:latest
USER root
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y sudo libltdl-dev
ARG dockerUser='my-user-name';
ARG group='docker';
# crate group if not exists
RUN if ! grep -q -E "^$group:" /etc/group; then groupadd $group; fi
# create user if not exists
RUN if ! grep -q -E "^$dockerUser:" /etc/passwd; then useradd -c 'Docker image creator' -m -s '/bin/bash' -g $group $dockerUser; fi
# add user to the group (if it was present and not created at the line above)
RUN usermod -a -G ${group} ${dockerUser}
# set default user that runs the container
USER ${dockerUser}
我是这样建造的:
docker build --tag my-gulp:latest .
最后通过脚本
这样运行:
#!/bin/bash
image="my-gulp:latest";
workDir='/home/gulp/project';
docker run -it --rm \
-v $(pwd):${workDir} \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
${image} /bin/bash
这会将我正确地记录到docker容器中,但当我想查看图像时
docker images
或者试着拉图像
docker pull hello-world:latest
我得到这个错误:
尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock:收到http:///var/run/docker.sock/v1.38/images/json:拨unix/var/run/docker。sock:connect:权限被拒绝
如何创建docker图像从chekote/gup:最新的
所以我可以使用docker里面没有错误?
或者错误是因为错误的docker运行命令?
打开终端并键入此命令
sudo chmod 666 /var/run/docker.sock
让我知道结果...
权限匹配仅在数字用户ID和组ID上进行。如果套接字文件为模式0660,由用户ID 0和组ID 32拥有,并且您以用户ID 1000和组ID 1000和16的用户身份调用它,如果一个/etc/group
文件名gid32为docker
,而另一个文件名gid16相同,则无所谓;数字GID不同,您无法访问该文件。此外,由于Docker组的实际数字gid会因系统而异,因此您无法将其烘焙到Docker文件中。
许多Docker映像只是作为根运行;如果他们这样做,他们可以访问绑定挂载的Docker套接字文件,而不管其权限如何。
如果您以非根用户身份运行,您可以使用docker run--group-add
选项向有效用户添加(数字)gid;它不需要在/etc/group
文件中特别提及。在Linux主机上运行:
docker run --group-add $(stat -c '%g' /var/run/docker.sock) ...
您通常不会在Dockerfile中安装sudo
(它对非交互式程序不太适用,由于容器的短暂性,您通常不会在交互式shell中做很多工作,并且您总是可以docker exec-u 0
虽然安装一些非root用户通常被认为是最佳实践。您可以将Dockerfile减少到
FROM node:8
RUN apt-get update
# Trying to use the host's `docker` binary may not work well
RUN apt-get install -y docker.io
# Install the single node tool you need
RUN npm install -g gulp
# Get your non-root user
RUN adduser myusername
# Normal Dockerfile bits
WORKDIR ...
COPY ...
RUN gulp
USER myusername
CMD ["npm", "run", "start"]
(Docker基础映像有几个与Docker最佳实践不匹配的东西,并且似乎没有定期更新;我只是使用标准的节点
映像作为基础,并在其上添加您需要的一个构建工具。)
一个快速避免这种情况的方法。将您的用户添加到组中。
sudo gpasswd -a $USER docker
然后设置适当的权限。
sudo setfacl -m user:<your username>:rw /var/run/docker.sock
从那里应该很好。
我是新来的docker我刚刚尝试使用docker在我的本地机器(Ubuntu 16.04)与Jenkins。 我用下面的管道脚本配置了一个新作业。 但它以以下错误失败。
我刚刚运行Dockerfile在jenkins安装然后我得到以下错误: 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock:邮递http:///var/run/docker.sock/v1.40/build?buildargs={}
用例: Base Instance有一个Ubuntus 16.04安装的Docker,它可以找到并检查docker映像。 部署了Jenkins Docker容器的实例。 此Jenkins实例将在容器中装载主机的Docker套接字。如文中所述。 现在他在Jenkins容器上安装了docker二进制文件。 运行Jenkins conatiner的Docker ps并列出可用的容器。 但是当从Jenki
我正在尝试构建然后在Jenkins上运行docker映像。我在AWS ec2服务器上的ubuntu上设置了Jenkins。当我尝试构建时,我会收到这个错误: 为了便于参考,我还附上了我的詹金斯档案。 我正在使用Jenkins的默认管理员帐户。 我还将Jenkins用户添加到docker组。但这并没有解决问题。我还通过运行以下程序验证了这一点: 其输出: 如果你需要任何进一步的信息,请告诉我。
试图将gitlab中的项目转换为docker映像。gitlab是自托管的。这是我得到的错误: 我添加了一个runner,注册了它,用docker模板创建了一个gitlab-ci.yml,没有做任何修改。作为解决方案,我在添加转轮之前和之后尝试了< code > chmod 666/var/run/docker . sock ,但它不起作用。我还在运行和注册docker runner之前添加了sud
我在高山基地docker容器上遇到这个错误:“无法连接到unix://var/run/docker.sock.docker守护进程正在运行吗?”当我运行下面的命令:docker图像时,我使用下面的docker-comple: 这是我的dockerFile: 当我用这个命令运行容器时,它的ok docker run-ti-v /var/run/docker.sock:/var/run/docker.