azure - Docker-Compose/Kubernetes Yaml 文件上的 CentOS 镜像问题

标签 azure docker kubernetes docker-compose

我有一个 dockerfile,可以在 CentOS 上作为基本镜像正常运行并启用 systemd,如 CentOS 官方 docker hub 镜像文档中的建议 - https://hub.docker.com/_/centos/ .

我必须使用以下命令启动我的容器 -

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 容器服务,因此我尝试创建一个使用此 docker 镜像并创建集群的 yaml 文件。

我的 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 run time 命令中提到的相同配置并将其转换为 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

如果是 Docker Compose:

容器正常运行,但我的应用程序内的服务无法启动。我无法访问我的 localhost:8080,但容器仍在运行。

我在想,在 compose 或集群上访问它时,这是否与启用了 systemd 的容器有关?

谢谢!

最佳答案

根据the fine manual ,如果您提供 command: 它会取代 ENTRYPOINT,并且 args: 会取代 CMD,这意味着您的最终“命令”该图像运行的是:

-c /usr/sbin/init --allow-privileged=true bash

这对于前导的 -c 看起来非常可疑,特别是因为您的 docker-compose.yml 仅包含 /usr/sbin/init .

关于azure - Docker-Compose/Kubernetes Yaml 文件上的 CentOS 镜像问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249171/

相关文章:

node.js - Kubernetes + Azure + 环境变量

Docker 的 "executable file not found in $PATH: unknown"试图运行 "cd"

c# - 如何以编程方式重新启动 Azure Web App

powershell - AzureAD PowerShell New-AzureRmRoleAssignment 不断失败

azure - 无法删除 Azure 应用服务计划

kubernetes - 如何将 IPv6 用于 kubernetes 服务 ip 空间?

dns - 描述 kubernetes 命名空间时的随机字符

linux - Docker 化用户 session

docker - 将 docker 上传到弹性 beantalk 后,ffmpeg 似乎消失了

docker - 如何在 Docker Desktop 上创建新的 Kubernetes 集群?