我无法在直接写入工作的docker-compose文件中获取环境变量。与命令行类似的配置也可以像这样正常工作:
docker run --name container_name -d --network=my-net --mount type=bind,src=/Users/t2wu/Documents/Work/Dodo/Intron-Exon_expression/DockerCompose/intronexon_db/mnt_mysql,dst=/var/lib/mysql -e MYSQL_DATABASE=db_name -e MYSQL_USER=username -e MYSQL_PASSWORD=passwd mysql/mysql-server:8.0.13
这是一个MySQL实例,它设置了三个环境变量:MYSQL_DATABASE,MYSQL_USER和MYSQL_PASSWORD。稍后,我可以将bash启动到
docker exec -it container_name bash
中,并启动客户端mysql -u username -p
并进行连接。但是,当我用
docker-compose.yml
编写它时:version: "3.7"
services:
intronexon_db:
image: mysql/mysql-server:8.0.13
volumes:
- type: bind
source: ./intronexon_db/mnt_mysql
target: /var/lib/mysql
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: username
MYSQL_PASSWORD: passwd
networks:
- my-net
networks:
my-net:
driver: bridge
然后,当我使用mysql客户端时,就好像该用户不存在。如何在docker运行期间将其设置为等同于
-e
标志?编辑
docker-compose --version
显示docker-compose version 1.24.1, build 4667896b
编辑2
环保标志确实起作用。但是我遇到了问题,因为:
mysql --host=localhost -u user -p
。指定127.0.0.1
将不起作用。 --host
容器时,来自官方docker镜像的示例stack.yml不必指定adminer
。如果我清除了管理员,则需要给出--host
标志。 /var/lib/mysql
有关,但我不确定。 command: --default-authentication-plugin=mysql_native_password
实际上很重要。我不知道为什么当我做docker run
时我不需要做任何事情。 最佳答案
docker-compose接受数组或字典这两种类型的ENV,最好加倍使用或尝试两种方法。
环境
Add environment variables. You can use either an array or a dictionary. Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser.
Environment variables with only a key are resolved to their values on the machine Compose is running on, which can be helpful for secret or host-specific values.
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
要么
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
可以与docker-compose version一起使用,因为它可以与
3.1
一起正常工作。如官方图片所示,因此最好尝试offical image docker-compose.ymlversion: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
此外,最好调试一切似乎正确但缺少一些次要语法的情况。您可以在使用DB之前对其进行测试。
version: "3.7"
services:
intronexon_db:
image: alpine
environment:
MYSQL_DATABASE: myDb
command: tail -f /dev/null
运行
docker-compose up
现在在测试环境中进行测试和调试。
docker exec -it composeenv_intronexon_db_1 ash -c "printenv"
关于docker - 什么是docker-compose中的docker run -e等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780321/