GVKun编程网logo

redhat7.4 docker run启动容器报错container_linux.go:449(docker 启动容器失败)

19

针对redhat7.4dockerrun启动容器报错container_linux.go:449和docker启动容器失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AzureDocke

针对redhat7.4 docker run启动容器报错container_linux.go:449docker 启动容器失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Azure Docker Container – 如何将启动命令传递给docker run?、Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name、Centos 7 docker 启动容器iptables 报No chain/target/match by that、Centos7.3 安装 Docker 报错:Requires: container-selinux >= 2:2.74等相关知识,希望可以帮助到你。

本文目录一览:

redhat7.4 docker run启动容器报错container_linux.go:449(docker 启动容器失败)

redhat7.4 docker run启动容器报错container_linux.go:449(docker 启动容器失败)

问题现象:

在redhat服务器上使用docker run启动容器时报错:docker: Error response from daemon: OCI runtime create failed: container_linux.go:449;container init caused "write /proc/self/attr/keycreate: permission denied"": unknown.

问题原因:由于操作系统已启用SELinux,造成“/proc/self/attr/keycreate” 没有写入权限  使用命令:getenfor查看SELinux运行模式

root@localhost ~]# getenforce
#查询SELinux的运行模式
Enforcing
#当前的SELinux是强制模式
[root@localhost ~]# sestatus
SELinux status:              enabled
SELinuxfs mount:             /selinux
Current mode:                enforcing
Mode from config file:       enforcing
Policy version:              24
Policy from config file:     targeted

 

解决办法:

1 永久方法 – 需要重启服务器

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

2 临时方法 – 设置系统参数

使用命令setenforce 0

附:
setenforce 1      //设置SELinux 成为enforcing模式
setenforce 0     //设置SELinux 成为permissive模式

 

Azure Docker Container – 如何将启动命令传递给docker run?

Azure Docker Container – 如何将启动命令传递给docker run?

面对这个屏幕,我已经设法在docker容器应用程序服务上轻松地将rails应用程序部署到azure,但是记录它是一个痛苦,因为他们访问日志的唯一方法是通过FTP.

enter image description here

有没有人想出一个在azure中运行docker run命令的好方法,所以它基本上接受任何参数.

在这种情况下,它试图简单地登录到远程服务,如果任何人还有其他建议检索除FTP之外的日志,将大量欣赏.

最佳答案
不,在撰写本文时,这是不可能的,您只能传递您通常会传递给docker run container的任何内容:tag%YOUR_STARTUP_COMMAND_WILL_GO_HERE_AS_IS%,因此在您的容器名称之后.

TLDR除了需要在容器中运行的命令外,您无法将任何启动参数传递给Linux WebApp.让我们说你想使用PROD标签运行名为MYPYTHON的容器并运行一些python代码,你会做这样的事情

Startup Command = /usr/bin/python3 /home/code/my_python_entry_point.py

这将被附加(仅在非常结束)到实际的docker命令:

docker run -t username/MYPYTHON:PROD /usr/bin/python3 /home/code/my_python_entry_point.py

Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name

Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name

启动一个有 nat 映射端口的容器时,iptables 报 No chain/target/match by that name

Shell
1
2
docker run - d - p 2181 : 2181 - p 2888 : 2888 - p 3888 : 3888 garland / zookeeper
Error response from daemon : Cannot start container 565c06efde6cd4411e2596ef3d726817c58dd777bc5fd13762e0c34d86076b9e : iptables Failed : iptables -- wait - t nat - A DOCKER - p tcp - d 0 / 0 -- dport 3888 - j DNAT -- to - destination 192.168.42.11 : 3888 ! - i docker0 : iptables : No chain / target / match by that name

找了N多网站和官方issue后,还是没找到真正的解决方法,网上到处转载的只是分析了原因,并没有明确的解决方案,为此与同事通宵加班终于解决了这个问题。

找到系统的/etc/sysconfig/iptables,如果没有用以下命令保存一下,然后查看里边的内容

Shell
1
2
iptables - save > / etc / sysconfig / iptables
cat / etc / sysconfig / iptables

发现内容如下

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
* filter
: INPUT ACCEPT [ 0 : 0 ]
: FORWARD ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 0 : 0 ]
- N whitelist
- A whitelist - s 192.168.42.0 / 24 - j ACCEPT
#syn
- N syn - flood
- A INPUT - p tcp -- syn - j syn - flood
- I syn - flood - p tcp - m limit -- limit 3 / s -- limit - burst 6 - j RETURN
- A syn - flood - j REJECT
#DOS
- A INPUT - i eth0 - p tcp -- syn - m connlimit -- connlimit - above 15 - j DROP
- A INPUT - p tcp - m state -- state ESTABLISHED , RELATED - j ACCEPT
## 省略一些简单的防火墙规则

查看启动容器的报错信息发现-A DOCKERDOCKER链,但在iptables文件里并没有找到,

由于之前在自己的系统(archlinux)学习使用docker时并没遇到这问题,

所以马上去看了下自己系统里的iptables的文件,

内容如下

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
* nat
: PREROUTING ACCEPT [ 27 : 11935 ]
: INPUT ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 598 : 57368 ]
: POSTROUTING ACCEPT [ 591 : 57092 ]
: DOCKER - [ 0 : 0 ]
- A PREROUTING - m addrtype -- dst - type LOCAL - j DOCKER
- A OUTPUT ! - d 127.0.0.0 / 8 - m addrtype -- dst - type LOCAL - j DOCKER
- A POSTROUTING - s 172.17.0.0 / 16 ! - o docker0 - j MASQUERADE
- A POSTROUTING - s 172.17.0.3 / 32 - d 172.17.0.3 / 32 - p tcp - m tcp -- dport 1521 - j MASQUERADE
- A POSTROUTING - s 172.17.0.3 / 32 - d 172.17.0.3 / 32 - p tcp - m tcp -- dport 22 - j MASQUERADE
- A DOCKER ! - i docker0 - p tcp - m tcp -- dport 49161 - j DNAT -- to - destination 172.17.0.3 : 1521
- A DOCKER ! - i docker0 - p tcp - m tcp -- dport 49160 - j DNAT -- to - destination 172.17.0.3 : 22
COMMIT
# Completed on Sun Sep 20 17:35:31 2015
# Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015
* filter
: INPUT ACCEPT [ 139291 : 461018923 ]
: FORWARD ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 127386 : 5251162 ]
: DOCKER - [ 0 : 0 ]
- A FORWARD - o docker0 - j DOCKER
- A FORWARD - o docker0 - m conntrack -- ctstate RELATED , ESTABLISHED - j ACCEPT
- A FORWARD - i docker0 ! - o docker0 - j ACCEPT
- A FORWARD - i docker0 - o docker0 - j ACCEPT
- A DOCKER - d 172.17.0.3 / 32 ! - i docker0 - o docker0 - p tcp - m tcp -- dport 1521 - j ACCEPT
- A DOCKER - d 172.17.0.3 / 32 ! - i docker0 - o docker0 - p tcp - m tcp -- dport 22 - j ACCEPT
COMMIT
# Completed on Sun Sep 20 17:35:31 2015

对比后以去掉不相关的规则,以现*nat规则里有以下的对于docker的配置

Shell
1
2
3
4
5
6
7
8
9
* nat
: PREROUTING ACCEPT [ 27 : 11935 ]
: INPUT ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 598 : 57368 ]
: POSTROUTING ACCEPT [ 591 : 57092 ]
: DOCKER - [ 0 : 0 ]
- A PREROUTING - m addrtype -- dst - type LOCAL - j DOCKER
- A POSTROUTING - s 172.17.0.0 / 16 ! - o docker0 - j MASQUERADE
COMMIT

*filter规则里对docker的配置如下

Shell
1
2
3
4
5
6
7
8
9
10
* filter
: INPUT ACCEPT [ 139291 : 461018923 ]
: FORWARD ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 127386 : 5251162 ]
: DOCKER - [ 0 : 0 ]
- A FORWARD - o docker0 - j DOCKER
- A FORWARD - o docker0 - m conntrack -- ctstate RELATED , ESTABLISHED - j ACCEPT
- A FORWARD - i docker0 ! - o docker0 - j ACCEPT
- A FORWARD - i docker0 - o docker0 - j ACCEPT
COMMIT

去掉不相关规则后的配置文件如下(可以直接用):

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
* nat
: PREROUTING ACCEPT [ 27 : 11935 ]
: INPUT ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 598 : 57368 ]
: POSTROUTING ACCEPT [ 591 : 57092 ]
: DOCKER - [ 0 : 0 ]
- A PREROUTING - m addrtype -- dst - type LOCAL - j DOCKER
- A OUTPUT ! - d 127.0.0.0 / 8 - m addrtype -- dst - type LOCAL - j DOCKER
- A POSTROUTING - s 172.17.0.0 / 16 ! - o docker0 - j MASQUERADE
COMMIT
# Completed on Sun Sep 20 17:35:31 2015
# Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015
* filter
: INPUT ACCEPT [ 139291 : 461018923 ]
: FORWARD ACCEPT [ 0 : 0 ]
: OUTPUT ACCEPT [ 127386 : 5251162 ]
: DOCKER - [ 0 : 0 ]
- A FORWARD - o docker0 - j DOCKER
- A FORWARD - o docker0 - m conntrack -- ctstate RELATED , ESTABLISHED - j ACCEPT
- A FORWARD - i docker0 ! - o docker0 - j ACCEPT
- A FORWARD - i docker0 - o docker0 - j ACCEPT
COMMIT
# Completed on Sun Sep 20 17:35:31 2015

然后再加上自己服务器的过滤规则,合并后覆盖到Centos 7的/etc/sysconfig/iptables文件

重启iptables 服务

Shell
1
systemctl restart iptables .service

两次启动对应docker容器,

Shell
1
docker run - d - p 2181 : 2181 - p 2888 : 2888 - p 3888 : 3888 garland / zookeeper

发现容器启动成功,虽然有警告,但并不影响容器的使用

相关推荐:http://blog.csdn.net/fwj380891124/article/details/53023245

     http://blog.jobbole.com/98869/

Centos 7 docker 启动容器iptables 报No chain/target/match by that

Centos 7 docker 启动容器iptables 报No chain/target/match by that

1.运行Registry出错

[root@localhost ~]# docker run -d -p 5000:5000 -v ~/docker-registry:/tmp/registry registry
d03d54ce1199d18b11c07638ed7963f6a5d3814bdbc32cf1ef2159ebc2c06fd6
docker: Error response from daemon: driver failed programming external connectivity on endpoint inspiring_lewin (c1a0dd7ff97432868aea4fea178bd69dd07eedf0316ffbad56a6101bcfb85e01):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.17.0.2:5000 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).
[root@localhost ~]# 

操作系统为centos7

2. 解决方法

把防火墙开启来 #systemctl start firewalld

Centos7.3 安装 Docker 报错:Requires: container-selinux >= 2:2.74

Centos7.3 安装 Docker 报错:Requires: container-selinux >= 2:2.74

安装 Docker 19.03.8:
yum install docker-ce-19.03.8
 
报错如下:
Error: Package: 3:docker-ce-19.03.8-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
Error: Package: containerd.io-1.4.4-3.1.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
 
操作系统:
CentOS Linux release 7.3.1611 (Core)
 
解决方式:
使用下面的命令安装 container-selinux:
yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-3.el7.noarch.rpm
container-selinux 更多版本可以在下面链接查看:
http://mirror.centos.org/centos/7/extras/x86_64/Packages/
 
 
参考:
https://stackoverflow.com/questions/45272827/docker-ce-on-rhel-requires-container-selinux-2-9

我们今天的关于redhat7.4 docker run启动容器报错container_linux.go:449docker 启动容器失败的分享就到这里,谢谢您的阅读,如果想了解更多关于Azure Docker Container – 如何将启动命令传递给docker run?、Centos 7 docker 启动容器 iptables 报 No chain/target/match by that name、Centos 7 docker 启动容器iptables 报No chain/target/match by that、Centos7.3 安装 Docker 报错:Requires: container-selinux >= 2:2.74的相关信息,可以在本站进行搜索。

本文标签: