簡體   English   中英

使用 bash,是否可以在 docker 容器內輸入命令

[英]with bash, is it possible to enter commands inside a docker container

我正在嘗試查看“進入”容器后是否可以運行命令:


#!/bin/sh

# 1 - create a new user in the db for mautic

podman exec -it postal-mariadb mysql -h 127.0.0.1 -u root -p$1 <<EOF
CREATE DATABASE mauticdb;
        CREATE USER 'mautic' IDENTIFIED BY /'$1/';
        GRANT ALL PRIVILEGES ON mauticdb.* TO 'mautic';
        FLUSH PRIVILEGES;
        exit
EOF

這給了我一個錯誤: Error: container create failed (no logs from conmon): EOF

但我想也許這不是HERE DOCS的好用處

像這樣的東西也不起作用:

echo $1 | podman exec -it postal-mariadb mysql -h 127.0.0.1 -u root -p postal-server-1 -e 'select * from deliveries limit 10;'

盡管您可能希望從 podman 命令行中刪除-t ,但這是對 here docs 的一種很好(且常見)的用法。 如果我有一個 mariadb 容器正在運行:

podman run -d --name mariadb -e MARIADB_ROOT_PASSWORD=secret docker.io/mariadb:10

然后,如果我將您的 shell 腳本放入名為createdb.sh的文件中,針對我的環境修改為如下所示:

podman exec -i mariadb mysql -u root -p$1 <<EOF
CREATE DATABASE mauticdb;
        CREATE USER 'mautic' IDENTIFIED BY '$1';
        GRANT ALL PRIVILEGES ON mauticdb.* TO 'mautic';
        FLUSH PRIVILEGES;
EOF

我做了三個改變:

  1. 我已經從podman exec命令行中刪除了-t ,因為我們在 stdin 上傳遞輸入而不是啟動交互式終端;
  2. 我刪除了不必要的exit命令(交互式 mysql shell 將在到達文件結尾時退出);
  3. 我刪除了引號周圍的奇怪正斜杠( /'$1/' -> '$1' )。

我可以這樣運行它:

sh createdb.sh secret

它運行沒有錯誤。 數據庫存在:

$ podman exec mariadb mysql -u root -psecret -e 'show databases'
Database
information_schema
mauticdb   <--- THERE IT IS
mysql
performance_schema
sys

並且用戶存在:

$ podman exec mariadb mysql -u root -psecret mysql -e 'select user from user where user="mautic"'
User
mautic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM