Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Docker Compose/Kubernetes Yaml文件上的CentOS图像问题_Azure_Docker_Kubernetes_Docker Compose - Fatal编程技术网

Azure Docker Compose/Kubernetes Yaml文件上的CentOS图像问题

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

正如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 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状态),那么你的容器有问题,所以它不会真正启动,有很多方法可以解决这个问题