Azure Docker Compose/Kubernetes Yaml文件上的CentOS图像问题
正如CentOS官方docker hub镜像文档中所建议的那样,我有一个docker文件,它在CentOS作为基本映像和启用systemd时运行良好 我必须使用以下命令启动容器-Azure Docker Compose/Kubernetes Yaml文件上的CentOS图像问题,azure,docker,kubernetes,docker-compose,Azure,Docker,Kubernetes,Docker Compose,正如CentOS官方docker hub镜像文档中所建议的那样,我有一个docker文件,它在CentOS作为基本映像和启用systemd时运行良好 我必须使用以下命令启动容器- docker run -d -p 8080:8080 -e "container=docker" --privileged=true -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro
docker run -d -p 8080:8080 -e "container=docker" --privileged=true -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro myapplicationImage bash -c "/usr/sbin/init"
在这里,一切都像一个魅力,我可以运行我的形象,一切都很好。我正在尝试将我的映像部署到Azure容器服务,因此我正在尝试创建一个yaml文件,该文件使用此docker映像并创建一个集群
我的Yaml文件如下所示。
apiVersion: apps/v2beta1
kind: Deployment
metadata:
name: myapp-test
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-test
spec:
containers:
- name: myapp-test
image: myappregistry.azurecr.io/myapp-test:1.0
ports:
- containerPort: 8080
args: ["--allow-privileged=true","bash"]
securityContext:
capabilities:
add: ["SYS_ADMIN"]
privileged: true
command: [ "-c","/usr/sbin/init" ]
imagePullSecrets:
- name: myapp-secret-test
---
apiVersion: v1
kind: Service
metadata:
name: myapp-test
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: myapp-test
这并没有改变我的形象。上面是一个kubernetes集群yaml文件。
我也试过Docker Compose
version: '3'
services:
myapp-test:
build: ./myapp-folder
environment:
- container=docker
volumes:
- ./sys/fs/cgroup:/sys/fs/cgroup:ro
ports:
- "8082:8080"
privileged: true
cap_add:
- SYS_ADMIN
security_opt:
- seccomp:unconfined
command: "/usr/sbin/init"
这两种配置都无法创建容器。我使用的配置与上面docker运行时命令中提到的配置相同,并将其转换为yaml。但运行时命令起作用,我可以访问我的应用程序,但yaml文件失败。我遗漏了什么吗
这是我的kubernetes错误:
➜ $ kubectl get po --watch
NAME READY STATUS RESTARTS AGE
myapp-test-6957c57f6c-zmbt6 0/1 RunContainerError 4 9m
myapp-test-6957c57f6c-zmbt6 0/1 CrashLoopBackOff 4 9m
➜ $ kubectl get svc --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-test LoadBalancer 10.0.X.XXX 120.XXX.XX.XXX 8080:30150/TCP 12m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 43m
➜ $ kubectl得到po——看
名称就绪状态重新启动
myapp-test-6957c57f6c-zmbt6 0/1运行容器错误4 9m
myapp-test-6957c57f6c-zmbt6 0/1碰撞回位4 9m
➜ $ kubectl得到svc——看
名称类型CLUSTER-IP外部IP端口年龄
myapp测试负载平衡器10.0.X.XXX 120.XXX.XX.XXX 8080:30150/TCP 12m
kubernetes ClusterIP 10.0.0.1 443/TCP 43m
如果是Docker撰写:
➜ $ kubectl get po --watch
NAME READY STATUS RESTARTS AGE
myapp-test-6957c57f6c-zmbt6 0/1 RunContainerError 4 9m
myapp-test-6957c57f6c-zmbt6 0/1 CrashLoopBackOff 4 9m
➜ $ kubectl get svc --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-test LoadBalancer 10.0.X.XXX 120.XXX.XX.XXX 8080:30150/TCP 12m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 43m
容器可以正常启动,但应用程序中的服务无法启动。我无法访问我的本地主机:8080,但容器仍在运行
我在想,在compose或cluster上访问启用systemd的容器时,它是否与我的容器有关
谢谢 根据,如果您提供命令:
它将取代入口点
,参数:
取代CMD
,则表示图像运行的最终“命令”是:
-c /usr/sbin/init --allow-privileged=true bash
这看起来很可疑,因为你的
docker compose.yml只包含/usr/sbin/init
我发现了。我需要在centOS映像中添加一些附加配置以启用systemd
# named (dns server) service
RUN yum install -y bind bind-utils
RUN systemctl enable named.service
# webserver service
RUN yum install -y nginx
RUN systemctl enable nginx.service
#Without this, init won't start the enabled services and exec'ing and starting
them reports "Failed to get D-Bus connection: Operation not permitted".
VOLUME /run /tmp
现在我的docker容器已启动并运行
谢谢:)kubernetes错误是什么?更新为错误。您是否创建了docker secret?不是在我的撰写中,而是创建了imagePullSecrets:-名称:Kubernete群集上的myapp secret测试。我也需要在compose上创建docker secret吗?好吧,如果你这样做了(并查看你的pod状态),那么你的容器有问题,所以它不会真正启动,有很多方法可以解决这个问题