运行 Docker 作为服务 - 环境变量
Running Docker as a Service - Environment Variables
我正在尝试 运行 我的 docker 容器在我的 linux 服务器中,并将其配置为 systemd 单元以进行自我管理。
我的 /etc/systemd/system/system.service 文件包含这一行:
[Unit]
Description=Your Container Name
After=docker.service
Requires=docker.service
StartLimitInterval=200
StartLimitBurst=10
[Service]
TimeoutStartSec=0
Restart=always
RestartSec=2
ExecStartPre=-/usr/bin/docker exec %n stop
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/bash -c 'docker login -u AWS -p $(aws ecr get-login-password --region eu-west-1) 0123456789.dkr.ecr.eu-west-1.amazonaws.com'
ExecStartPre=/usr/bin/docker pull 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest
ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def
[Install]
WantedBy=multi-user.target
这已被证明是有问题的,因为当我重新启动服务并检查状态时,它显示了这个错误:
● docker.name.service - name
Loaded: loaded (/etc/systemd/system/docker.name.service; disabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Thu 2022-03-10 19:28:06 UTC; 6min ago
Process: 11029 ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def (code=exited, status=127)
Process: 11018 ExecStartPre=/usr/bin/docker pull 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest (code=exited, status=0/SUCCESS)
Process: 10984 ExecStartPre=/usr/bin/bash -c docker login -u AWS -p $(aws ecr get-login-password --region eu-west-1) 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest (code=exited, status=0/SUCCESS)
Process: 10973 ExecStartPre=/usr/bin/docker rm %n (code=exited, status=1/FAILURE)
Process: 10951 ExecStartPre=/usr/bin/docker exec %n stop (code=exited, status=1/FAILURE)
Main PID: 11029 (code=exited, status=127)
Process: 8174 ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def (code=exited, status=127)
删除 docker -e 选项 env_var1=abc -e env_var2=def 并重新启动服务,然后允许服务正确启动。如何让这些环境变量从服务传递到 docker 容器?他们很重要。
docker run 将图像名称后的所有内容视为传递给容器的命令,覆盖 Dockerfile 中使用 CMD
.
配置的任何内容
要为容器本身提供环境变量,您的 -e
选项需要出现在图像名称之前:
ExecStart=/usr/bin/docker run --rm --name %n -e env_var1=abc -e env_var2=def 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest
我正在尝试 运行 我的 docker 容器在我的 linux 服务器中,并将其配置为 systemd 单元以进行自我管理。 我的 /etc/systemd/system/system.service 文件包含这一行:
[Unit]
Description=Your Container Name
After=docker.service
Requires=docker.service
StartLimitInterval=200
StartLimitBurst=10
[Service]
TimeoutStartSec=0
Restart=always
RestartSec=2
ExecStartPre=-/usr/bin/docker exec %n stop
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/bash -c 'docker login -u AWS -p $(aws ecr get-login-password --region eu-west-1) 0123456789.dkr.ecr.eu-west-1.amazonaws.com'
ExecStartPre=/usr/bin/docker pull 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest
ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def
[Install]
WantedBy=multi-user.target
这已被证明是有问题的,因为当我重新启动服务并检查状态时,它显示了这个错误:
● docker.name.service - name
Loaded: loaded (/etc/systemd/system/docker.name.service; disabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Thu 2022-03-10 19:28:06 UTC; 6min ago
Process: 11029 ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def (code=exited, status=127)
Process: 11018 ExecStartPre=/usr/bin/docker pull 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest (code=exited, status=0/SUCCESS)
Process: 10984 ExecStartPre=/usr/bin/bash -c docker login -u AWS -p $(aws ecr get-login-password --region eu-west-1) 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest (code=exited, status=0/SUCCESS)
Process: 10973 ExecStartPre=/usr/bin/docker rm %n (code=exited, status=1/FAILURE)
Process: 10951 ExecStartPre=/usr/bin/docker exec %n stop (code=exited, status=1/FAILURE)
Main PID: 11029 (code=exited, status=127)
Process: 8174 ExecStart=/usr/bin/docker run --rm --name %n 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest -e env_var1=abc -e env_var2=def (code=exited, status=127)
删除 docker -e 选项 env_var1=abc -e env_var2=def 并重新启动服务,然后允许服务正确启动。如何让这些环境变量从服务传递到 docker 容器?他们很重要。
docker run 将图像名称后的所有内容视为传递给容器的命令,覆盖 Dockerfile 中使用 CMD
.
要为容器本身提供环境变量,您的 -e
选项需要出现在图像名称之前:
ExecStart=/usr/bin/docker run --rm --name %n -e env_var1=abc -e env_var2=def 0123456789.dkr.ecr.eu-west-1.amazonaws.com/your-container:latest